ホームページ  >  記事  >  バックエンド開発  >  mysql_real_escape_string() と addslashes(): どちらのエスケープ関数がより優れた SQL インジェクション保護を提供しますか?

mysql_real_escape_string() と addslashes(): どちらのエスケープ関数がより優れた SQL インジェクション保護を提供しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-21 13:02:02747ブラウズ

mysql_real_escape_string() vs. addslashes(): Which Escaping Function Provides Better SQL Injection Protection?

SQL インジェクション保護のための mysql_real_escape_string() とaddlashes() の違いを理解する

Web アプリケーションの開発では、SQL インジェクション攻撃を防ぐことが重要です。 addslashes() は文字をエスケープするためによく使用される関数ですが、特定のシナリオでは不十分です。 mysql_real_escape_string() 関数は特にこれらの制限に対処し、SQL インジェクション保護を強化します。

文字エスケープの違い

mysql_real_escape_string() は、より広範囲の文字 (x00、n、r、、、'、") をエスケープします。 、x1a) と比較して、addslashes() は 3 文字 (' および NUL) のみをエスケープします。この包括的なカバレッジにより、SQL インジェクションに悪用される可能性のある文字が適切にエスケープされ、脆弱性が最小限に抑えられます。 addslashes() の脆弱性

addlashes() を使用しているにもかかわらず、Web アプリが文字エスケープのためにこの関数にのみ依存している場合、Web アプリは SQL インジェクションに対して脆弱なままです。addslashes() が失敗するシナリオの 1 つは、悪意のある入力に二重引用符が含まれている場合です。 (")。これらの引用符は、すでに引用符で囲まれた文字列を終了する可能性があり、攻撃者が任意の SQL ステートメントを挿入できるようにします。

例:

ユーザー入力が "John' OR 1='1" の場合、addlashes() は一重引用符 (') のみをエスケープし、次の SQL ステートメントになります:
<code class="php">$username = addslashes($_POST['username']);
$sql = "SELECT * FROM users WHERE username='$username'";</code>

二重引用符 (") はエスケープされないため、攻撃者は引用符で囲まれた文字列を終了して追加することができます。その結果、クエリは John だけでなくすべてのユーザーを返し、機密情報が侵害される可能性があります。
<code class="sql">SELECT * FROM users WHERE username='John\' OR 1=\'1\'</code>

結論

addslashes() は SQL インジェクション保護のための基本的な文字エスケープを提供します。 mysql_real_escape_string() は、より広範囲の文字をエスケープすることでこの制限を克服し、mysql_real_escape_string() を使用するか、優れた代替手段としてパラメータ化されたクエリを採用することで、この制限を大幅に強化できます。 SQL インジェクション攻撃に対するアプリケーションのセキュリティ。

以上がmysql_real_escape_string() と addslashes(): どちらのエスケープ関数がより優れた SQL インジェクション保護を提供しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。