ホームページ > データベース > mysql チュートリアル > SQL インジェクションは特定の文字セット条件下で `mysql_real_escape_string()` をバイパスできますか?

SQL インジェクションは特定の文字セット条件下で `mysql_real_escape_string()` をバイパスできますか?

Susan Sarandon
リリース: 2025-01-25 21:31:10
オリジナル
633 人が閲覧しました

Can SQL Injection Bypass `mysql_real_escape_string()` Under Specific Character Set Conditions?

特定の状況では、

sqlインジェクション mysql_real_escape_string()

はSQL注入の脆弱性を排除できますが、いくつかの特別な場合、それはまだバイパスされる可能性があります。

mysql_real_escape_string()脆弱性分析

いくつかのシナリオでは、攻撃者はASCII文字の文字セット(GBK、SJKなど)をサポートするために選択されたの欠陥を使用できます。

攻撃者は、無効なマルチシーケンスシーケンスを含む効果的な負荷を構築できます(たとえば、XBFX27など)。したがって、クエリに挿入すると、SQLが注入されます。 mysql_real_escape_string()

mysql_real_escape_string()

次のPHPコードを検討してください:

攻撃者が

から

の値を設定した場合、

の保護をバイパスし、テーブル内のすべての線を取得できます。
<code class="language-php">$login = mysql_real_escape_string($_POST['login']);
$password = mysql_real_escape_string($_POST['password']);

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";</code>
ログイン後にコピー

対策を緩和します$_POST['login'] \xbf\x27 OR 1=1 /*新しいMySQLバージョンにアップグレードします。mysql_real_escape_string()新しいMySQLバージョン(MySQL 5.1など)には、この特定の問題の修理手順が含まれています。

安全な文字セットを使用します:キャラクターセットを使用しない 'を使用し、キャラクターセットを有効な文字(UTF8、LATIN1など)として使用します。

PDOでのシミュレーション前処理ステートメント:

pdo :: Atmulating_preparesは、実際の事前処理文の使用を強制するために虚偽に設定されています。

    文字セットを正しく設定します:
  • またはPDO DSN文字セットパラメーターを使用して、データベース接続の文字セットを設定します。 このSQLモードは、回転のプロセスで効果的な文字の作成を防ぐことができ、それによりこの特定の脆弱性を減らします。ただし、潜在的な副作用に注意してください。

以上がSQL インジェクションは特定の文字セット条件下で `mysql_real_escape_string()` をバイパスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート