1

ユーザーが自分の名前を書き込める HTML テキスト入力があります。この名前はわかりやすい表示名であり、データベース内のユーザーの識別やバックエンドでの使用には使用されません。

utf-8 文字を許可して、中国語やスウェーデン語など、母国語の文字を入力できるようにしたいと考えています。

ただし、<、>、[、]、?、* などの特定の文字をブラックリストに登録して、入力を悪用して SQL インジェクションなどを実行しようとする潜在的なスクリプト キディを阻止したいと考えています。

これは簡単なコードで、ウェブ上に多くの例があると思いましたが、もし答えがあるとしても、ホワイトリストを使用して電子メール アドレスを検証する方法の例の中に埋もれています (英語の英数字のみで、アジア文字は含まれません)。または他の言語固有の文字)、または奇妙なことに、特定の文字のキー押下を完全に停止する方法。

私の場合、ユーザーを混乱させる可能性があると思うので、キーの押下を完全に停止したくありません。代わりに、ブラックリストに登録されている文字を入力した場合、文字 X を使用できないというエラーを出力します。

では、私のような正規表現がまったく苦手な人にとって、Javascript で文字をブラックリストに登録する簡単な方法はありますか?

また、使用している言語に関係なく、ユーザーがファンキーな文字を入力する機能を妨げない場合は、ホワイトリスト ソリューションを使用します。

4

2 に答える 2

1

まず、クライアント側とサーバー側の両方で入力データをクリーンアップする必要があります。攻撃を仕掛けるほど巧妙な人は、フォームに必要なデータを取得するのに十分な時間、javascript を無効にするほど巧妙です。

エントリを防ぐためのjavascript正規表現に関しては、これについて話すSOに関する質問がたくさんあります。

//技術的なこと

JavaScript正規表現はすべての特殊文字を削除します

この一連の正規表現は、クロス サイト スクリプティングから完全に保護されますか?

//不要な文字の入力を停止する単純な js の例。

http://www.sitepoint.com/forums/showthread.php?t=142118

私が読んだコンセンサスでは、ブラックリストではなくホワイトリストに登録する必要があるようです。おそらく、より経験豊富な SO の誰かが、ユースケースを処理するための最良の方法を教えてくれるでしょう。

于 2011-02-21T05:49:02.113 に答える
0

一般的に検証をどのように行っているかによって異なりますが (フレームワークとしてjQuery 検証が好きです)、基本的なチェックは次のようになります。

// set up a handler function
function checkBlacklist() {
    // check against a regex of bad chars
    // many ([]*? etc) may need to be escaped to work in regex
    if (/[\[\]<>\*\?]/.test(this.value)) {
        // take evasive action of some kind
    }
}
// assign it to your input
document.getElementById('mynameinput').onchange = checkBlacklist;

ただし、Mike Daniels が指摘したように、主な関心事がスクリプト キディである場合は、これを行わないでください。入力フォームをいじりたい人は誰でも、Javascript の検証を簡単に回避できます。JavaScript 検証は優れた UI 機能であると考えてください。ページをリロードすることなく、ユーザーに役立つフィードバックを提供します。しかし、それはいかなる種類のセキュリティでもありません.検証に使用するJavascriptに関係なく、サーバー側で入力をチェックしてサニタイズする必要があります.

于 2011-02-21T06:08:50.603 に答える