-3

ユーザーがプレーンテキストを入力してハッシュを生成する Web サイトを作成しました。ユーザーは単語/フレーズを入力して、MD5 または SHA1 (またはその両方) から選択できます。次に、サイトはこの入力を受け取り、MD5 と SHA1 に変換してデータベースに保存し、ユーザーに返します。ユーザーは検索バーにハッシュを入力することもできます。データベースにハッシュがある場合、元の単語が返されます。目的は、ユーザーに利益を提供しながら、クラウドソースのハッシュ テーブルを生成することです。主な機能は動作していますが、何をサニタイズする必要があるかについてジレンマがあります。検索機能が結果を返す可能性が向上するため、ユーザーが特殊文字を入力できるようにしたいと考えています。アドバイスをいただければ幸いです。ありがとうございます。

4

2 に答える 2

1

あなたのアプリケーションが何かをサニタイズする理由はわかりませ。ユーザーの入力で行っているのは、暗号化ハッシュ関数に入力することだけです。これらの関数は、任意のバイトシーケンスを問題なく受け入れます。

もちろん、結果ページに入力文字列を表示している場合は、HTMLコードに埋め込む前に、 htmlspecialchars()でエスケープする必要があります。同様に、URLにパラメーターとして含める場合は、urlencode()を使用してエスケープする必要があります。また、SQLデータベースに格納する場合は、データベースドライバーに適切なエスケープ関数を使用してエスケープする必要があります(例:mysqli :: escape_string())、またはプレースホルダーを使用して準備されたSQLステートメントを使用します。

また、暗号化ハッシュ関数は文字列ではなくバイト文字列で動作することに注意してください。これは、特に非ASCII文字を含むテキストの場合、ハッシュ値はバイトへのエンコードに使用される文字エンコードに依存することを意味します。Unicodeテキストの場合、使用される正規化形式にも依存する場合があります。UTF-8(正規化形式CまたはD、またはユーザーのブラウザーが送信するもの)は、最近ではかなり一般的な選択肢ですが、役立つようにしたい場合は、ユーザーにさまざまなエンコードの選択肢を提供することをお勧めします。

于 2013-03-21T11:49:20.603 に答える
1

ハッシュ関数は通常、インジェクション攻撃に対して脆弱ではないため、ハッシュするだけの場合は、何もサニタイズする必要はありません。

もちろん、すべてのデータベース入力を (挿入と検索の両方で) サニタイズする必要があります。ただし、パラメーター化されたクエリをサポートしない時代遅れのデータベース API を使用していない限り (mysql_*関数などは使用しないでください)、これは自動的に行われます。

于 2013-03-21T11:45:42.450 に答える