文字コーディングの問題を使用してバイパス
SQLインジェクション関数はSQL注射を防ぐことができますが、特定の場合にはバイパスされる場合があります。 mysql_real_escape_string()
次のPHPコードを検討してください:
mysql_real_escape_string()
このコードは安全であるように見えますが、文字セットのエンコーディングのエッジのために使用される場合があります。
攻撃方法:
<code class="language-php">$login = mysql_real_escape_string(GetFromPost('login')); $password = mysql_real_escape_string(GetFromPost('password')); $sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";</code>
次の手順への攻撃依存:
文字セットを設定します。コーディングを選択します(たとえば、GBK)。
効果的な負荷:
mysql_real_escape_string()
重要な問題は、サーバーの期待の文字セットが、クライアントが考える文字セットと一致しないことです。クライアントによって設定された接続コーディングは、正義を作るために使用されますが、場合によっては、無効なマルチライン文字をmysql_real_escape_string()
ではなく救済策:
UTF8MB4やUTF8などの非攻撃文字を使用すると、この問題を軽減できます。 no_backslash_escapes SQLモードを有効にすることも保護を提供できます。
mysql_real_escape_string()
安全な例:SET NAMES
mysql_set_charset()
結論:
通常、強力な保護を提供しますが、包括的な防衛SQL注入を確保するために、そのような潜在的なマージンに注意を払う必要があります。
以上が文字エンコーディングの問題により、SQL インジェクションは「mysql_real_escape_string()」をバイパスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。