SQLクエリに挿入する前に値にハッシュを使用すると、mysql_real_escape_stringを使用しなくてもSQLインジェクションから保護されますか?(サイト全体でこれを行うと仮定します)
編集:具体的には、目的は、ユーザーからキーを取得してハッシュしてから、テーブル内の他のハッシュ列と比較し、ハッシュが一致する別の列値を取得することです。指定しないでごめんなさい
SQLクエリに挿入する前に値にハッシュを使用すると、mysql_real_escape_stringを使用しなくてもSQLインジェクションから保護されますか?(サイト全体でこれを行うと仮定します)
編集:具体的には、目的は、ユーザーからキーを取得してハッシュしてから、テーブル内の他のハッシュ列と比較し、ハッシュが一致する別の列値を取得することです。指定しないでごめんなさい
はい。ただし、データが役に立たなくなります。:Pハッシュは一方向であるため、意味のあるデータを取り戻すことはできません。暗号化は双方向であり、それはおそらくあなたが本当に意味したことです。
準備されたSQLステートメントを使用することは、この種のことに対してより広く受け入れられている解決策だと思います。この質問を参照してください。
はい。ただし、情報をハッシュすると、ハッシュから情報を再生成することはできません。代わりにエンコード方式を使用してください。
また、mysql_
*関数は非推奨になりました(または間もなく廃止される予定です)。mysqli
またはへの切り替えを検討する必要がありPDO
ます。あなたが怠惰な(私のような)お尻ならmysqli
、元の関数とほとんど同じ手続き型を使用できmysql_
ます。
ハッシュ化された出力にmysqlで競合する文字が含まれていない限り、絶対に「はい」と言います。base64は、このようなことを行うための優れたアプローチです
はい。ただし、キーを暗号化されたものとハッシュとして保存する場合に限ります。これを行うtclスクリプトを完成させました。主要な手順が役に立ちます。プレーンテキストキーとハッシュを取得し、このプレーンテキストキーも暗号化して、保存しているフォームデータと同じ行に両方を保存します(これも暗号化されます)。
キー列を復号化してボックスに挿入することにより、ドロップダウンなどにプレーンテキストキーを入力します。これで、検索するプレーンテキストキーを選択できます。
これには、レコードを追加、更新、削除、またはレコードを表示するたびに呼び出される暗号化、復号化、およびハッシュルーティングが必要ですが、マイクロ秒レベルで存在することは確かですが、速度が低下することはありません。
自動パディングと自動IV作成でcbcを実行できるように、暗号化がopensslなどの標準化された尊敬されるソースからのものであることを確認してください。このように、データベース内の単語は異なる方法で暗号化されます。これが、キーをハッシュする必要がある理由でもあります。そうしないと、暗号化が異なり、何も検索できなくなります。
このようにして、キーがハッシュされ、他のハッシュ値と照合されます。悪意のある単語のグループをフィールドに挿入してみてください。発生する可能性のある問題は、危険ではない単語にハッシュされることです。
tclを使用する場合は、中括弧を使用することも役立ちます。これにより、最初から問題を防ぐことができます。
md5()またはsha1()を考えている場合、ハッシュを復号化することはできません。あなたがあなた自身の暗号化アルゴリズムを持っているなら、私はそれのために行くと言います。
私の意見では、両方を使用する必要があると思います。例を次に示します。
$em = mysql_real_escape_string($_REQUEST['email']);
$pw = mysql_real_escape_string($_REQUEST['password']);
at the insert you use the password($pw) function.