MYSQL注入をmd5で暗号化すると、それでも実行されますか? 「mysql_real_escape_string」を実行する前にMYSQL注入を暗号化すれば、mysql注入をNULLにすることができますか?私は暗号化する前に "mysql_real_escape_string"を実行する必要がありますか?MYSQL注入とmd5暗号化
答えて
md5()
functionは、ASCII文字0-9とa-fを含む文字列を返します。 SQLインジェクションでは、'
または"
のような文字を使用する必要があります。したがって、md5()によって生成されたハッシュされた文字列は、アルゴリズムが期待通りに機能することを考慮してSQLインジェクションを発生させません。
$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);
mysql_query("SELECT * FROM users WHERE user='$username' AND pass='$password'");
をしかし、それは常にあなたがmysql_real_escape_string()とあなたのクエリに渡すデータをエスケープすることをお勧めします:
したがって、あなたが心配することなく、このような何かを書くことができます。
私は通常、 "sprintf()"とmysql_real_escape_stringをクエリの第2引数として使用します。私はMD5の暗号化を逃れることができないのかどうかはわかりませんでしたが、コード化されているときに悪意のある使用ができなければ、心配する必要はありません。 –
'良い練習'は、すべてのデータをエスケープすることです。 MD5リターンは信頼できる。差別せずにすべてのデータをエスケープすると、2つの問題が発生します。1.エスケープは必ずしもデータをサニタイズする方法ではありません(数字を考える).2つの共通点はありませんが、実際にはダブルエスケープ問題に陥る可能性があります。 – Mchl
@Mchl:** All **データは信頼できないエンティティ(プログラマー)によって処理されるため、信頼できません。そのため、SQLクエリーに渡すすべてのデータをエスケープするのがよい方法です。 – Dor
MD5で値をハッシュしても、悪意のある注射可能な文字は含まれなくなりました。 MySQLはMD5ハッシュをデコードせず、SQLとして解釈/実行します。実際、一方向アルゴリズムであるため、MD5ハッシュはデコードできません。
それは設計されていますが、意図したほど強くはありません。 – bdares
MD5のハッシュ値はバイナリデータで、16進数はPHPで表されます。つまり、数字には0..9とA〜Fの文字しか含まれていません。 この文字ではSQLインジェクションはできませんので、安全です。
MD5ハッシュ値自体はSQLインジェクションを引き起こすことはできませんが、SQLインジェクションを回避しようとしている場合は、には非常に良い方法です。原因はです。
注射(MD5'dパスワード)を引き起こすことができない変数の1つのクラスを特殊ケースに入れ、別のもの(例:整数に評価されたもの)をエスケープする必要があります。あなたのチームの誰もそれを見つけ出すことはできません。あなたのコードには本当の脆弱性があります。
安全なクラスを1つエスケープしないで、2番目の安全なクラスをエスケープしないようにしてから、3番目のクラスも安全であると間違って判断した場合 - MD5はバイナリエンコーディングであり、それを使って注射を作成する方法...おっと...あなたのコードにもう一つ本当の脆弱性があります。
次のようにしてください。
1)常にパラメータ化されたクエリを使用してください。これは不要なエスケープを行い、何かを逃れることを忘れるリスクを回避します。 mysqli
とbind_param
を使用します。
$stmt = $db->prepare('insert into users (username, password) values (?, ?)');
$stmt->bind_param('ss', $name, md5($password));
$stmt->execute();
2)何らかの理由で、すべてを逃れることができない場合。それが不要な場合でも。あなたは何かを忘れたくはありません。
SQLインジェクションと戦うためのルールは、何が安全で何が安全でないかを習得しようとしないでください。安全な値を安全でないものとして扱う場合、プログラムは正しく機能します。安全でない値を安全なものとして扱う場合、プログラムには大きなセキュリティホールが含まれます。
一般的に、md5ハッシュ値は注入攻撃に使用できませんが、未加工 md5ハッシュ値を利用できることを指摘しておく価値があります。生のmd5ハッシュは、 md5($userSubmittedValue, true)
で生成されたハッシュです。出力は16進数でない出力を含むことがあるため、脆弱です。ハッシュを生の形式で生成するのは一般的ではありませんが、技術的にハッシュ値は注射攻撃で悪用される。
はここでそれを行うことができる方法の例です:
http://cvk.posterous.com/sql-injection-with-raw-md5-hashes
他が指摘したように、しかし、進MD5の出力は、インジェクション攻撃に対して脆弱ではありません。
- 1. Md5ハッシュの暗号化と復号化
- 2. MD5とブローフィッシングの暗号化?
- 3. 春のセキュリティ暗号化MD5
- 4. PHP MD5パスワードの暗号化とDBエントリ
- 5. Mysql暗号化キー
- 6. android md5暗号化がmysqlまたはphpと一致しませんか?
- 7. php md5は投稿名と値を暗号化しますか?
- 8. PHP MySQLユーザパスワード暗号化
- 9. Railsがmysqlを暗号化
- 10. MariaDB/MySQLテーブル暗号化
- 11. Java Mysqlのバックアップと暗号化
- 12. 暗号化と復号化
- 13. データベースとユーザー入力の暗号化されたパスワードと暗号化の比較
- 14. Android暗号化edittext入力
- 15. AndroidのAES暗号化/復号化 - 入力ストリームとbytearrayoutputstream
- 16. MD5テーブル内のすべてのパスワードを暗号化します
- 17. md5の暗号化は可能ですか?
- 18. PostgreSQLパスワード暗号化をMD5からSHAに変更
- 19. MD5を使用したPythonプログラムでのSQLログインの暗号化
- 20. Sharepointと暗号化
- 21. シーザー暗号暗号化Python
- 22. 良い暗号化/暗号化の本
- 23. OpenAM:RESTFUL API - 暗号化/暗号化パスワード
- 24. SWIFTの暗号化と復号化
- 25. ファイルの暗号化と復号化
- 26. DataTableオブジェクトの暗号化と復号化
- 27. ASP.net ViewStateの暗号化と復号化
- 28. ESAPIの暗号化と復号化
- 29. PHPスイッチ:暗号化と復号化
- 30. ファイルの復号化と暗号化
注射を暗号化することはどういう意味ですか?例がありますか? – Vache
あなたは、PHPソリューションをタグとして、または質問本体自体を明示的に見ていると言及してください。 – bdares