3

正規表現でテキストを検証するためにblurイベントを使用しているテキストボックスがあります。失敗した場合は、テキストボックスにフォーカスを維持させます。return functionName();通常のJavaScriptでは、実際のhtmlコントロール内のonblurイベントで言うことができます。$(document).ready()関数内でblurイベントをバインドするときに同様のことを行う方法はありますか?または、単に「これ」に焦点を合わせます。お手伝いありがとう。

$(document).ready(function() {");
    $('input:text.sqlValidation').blur(function() {");
        var sqlInjectionRegX2 = /...Regex.../;
        var value = this.value;
        if (sqlInjectionRegX2.test(value)) {
            alert('The text you have entered may contain malicious code and can not be submitted.');
            this.value = '';
            return false;
        }
        else return true;
    });
});
4

5 に答える 5

6

Javascript で正規表現を使用して SQL インジェクションを防ぐことは、すべての (または少なくともほとんどの) 悪の母です。 こんなことしないで!!! 代わりに、サーバー側のコードでパラメーターを使用してください。方法がわからない場合は、お問い合わせください。あなたが行っている方法で SQL インジェクションを防ごうとすると、うまくいかず、データを失うか、さらに悪化する可能性があります。敵が行う必要があるのは、Javascript を無効にする (または独自の HTTP リクエストを作成する) ことだけで、フィルターは役に立たなくなります。さらに、単一の正規表現で SQL インジェクションを完全にブロックすることは不可能だと思います。


質問に答えるには、ハンドラにreturn falseorを書いてみてください。event.preventDefault()ただし、完全には機能しません。Javascript でこのようにフォーカスを完全に制御することはできません。

于 2009-10-13T13:40:48.167 に答える
3

デフォルトの動作を防ぎ、イベントの伝播を停止してから、ハンドラーで this.focus() を実行できます。http://docs.jquery.com/Events/jQuery.Event。イベント操作は、イベント処理コードの前に行う必要があります。

于 2009-10-13T13:42:53.583 に答える
2

私は似たようなものに対処しなければなりませんでした - 一種の無限ループでそれ自体をトリガーしていた JavaScript のぼかしハンドラー。

解決策は次のとおりです。

var inBlur = false;
jQuery('#the_input_element').blur(function(){
    if (!inBlur) {
        inBlur = true;
        jQuery('#some_other_input_element').focus();
        inBlur = false;
        }
    });

これが尋ねられた正確な質問に答えていないことはわかっていますが、トピック(blur関数内でjQueryのblurイベントを停止する)に対処しているため、誰かにとって役立つかもしれません.

于 2013-02-19T07:26:36.720 に答える
1

設定するだけではありません

$(this).focus();

どこかであなたのぼかし機能の内側?

于 2009-10-13T13:35:19.737 に答える
0

パラメータを使用するようにレガシーコードを書き直さずにSQLインジェクションを防ぐための最良の方法(この質問は現在閉じられています)は、すべての引用符と円記号を2倍にすることだと思います(とで'置き換え''ます)。\\\

私はSQL構文の専門家ではないので、これが侵入できないことを保証することはできません。

于 2009-10-13T16:39:02.457 に答える