これは非常に頻繁に議論される問題ですが、私は最近この脆弱性を発見し、そのようなインジェクションに耐性があるかどうかをテストしていますが、その動作をシミュレートすることはできません. おそらく、私は彼らが使用しているクエリを理解していません。
私が興味を持っている部分:
最初の脆弱性は、無効なマルチバイト文字を拒否しない mysql_real_escape_string() 関数ファミリーに影響を与えます。たとえば、UTF-8 では、"0xC8 ' ' attacksql" または "0xC8 \ ' attacksql" 文字列は "one_character ' attacksql" に変換されます (スペースは無視されます)。したがって、クエリは次のとおりです。
SELECT ... WHERE v = ' mysql_real_escape_string("0xC8 ' attacksql") '
なる :
SELECT ... WHERE v = '0xC8' 'attacksql'
SELECT ... WHERE v = 'one_character ' attacksql'
したがって、攻撃者は attacksql コマンドを挿入できます。
質問はかなり不自由に聞こえますが、どうすればこのインジェクションを機能させることができますか?
注(編集済み):私はPHP 5.2.6、MySQL 5.0.51a(修正)を使用しており、DB接続で文字セット「utf8」が設定されています。