現在の位置: ホーム> 最新記事一覧> PHPでREAL_ESCAPE_STRING機能を使用して、SQLインジェクション攻撃を効果的に防止する方法は?

PHPでREAL_ESCAPE_STRING機能を使用して、SQLインジェクション攻撃を効果的に防止する方法は?

gitbox 2025-06-10

real_escape_stringとは何ですか?

Real_Escape_StringMySQLI拡張機能のメソッドであり、主に文字列の特殊文字を逃れるために使用されるため、悪意のあるSQLコードが実行されないようにします。危険な文字の前にバックスラッシュ( \ )を自動的に追加し、SQL構文で特別な意味を失います。

いつreal_escape_stringを使用する必要がありますか?

ユーザーの入力がSQLステートメントに直接スプライスされる状況には、入力コンテンツを逃れる必要があります。それ以外の場合、攻撃者は入力を使用して悪意のあるステートメントを作成し、それによりデータベース操作のロジックを変更できます。

real_escape_stringを正しく使用する方法は?

以下は、 real_escape_stringを使用してユーザー入力を安全に処理する方法を示す簡単な例です。

<code>&lt;?php // mysqli接続の作成$ conn = new mysqli( 'gitbox.net'、 'username'、 'password'、 'database');

//接続が成功しているかどうかを確認します
if($ conn-> connect_error){
die( "接続失敗:"。$ conn-> connect_error);
}

//ユーザーがフォームを介してユーザー名を送信したとします
$ user_input = $ _post ['username'];

// real_escape_stringを使用して、ユーザー入力をエスケープします
$ safe_input = $ conn-> real_escape_string($ user_input);

// SQLクエリステートメントを作成します
$ sql = "select * fromユーザーからusername = '$ safe_input'";

//クエリを実行します
$ result = $ conn-> query($ sql);

if($ result-> num_rows> 0){
//クエリの結果を処理します
while($ row = $ result-> fetch_assoc()){
エコー「ユーザーID:」。 $ row ["id"]。 " - ユーザー名:"。 $ row ["username"]。 "<br>";
}
} それ以外 {
エコー「一致するユーザーが見つかりません。」;
}

$ conn-> close();
?>
</code>

なぜREAL_ESCAPE_STRINGがSQLインジェクションを防ぐことができるのですか?

Real_escape_Stringは、単一の引用( ' )、二重引用符( " )、バックスラッシュ( \ )など、SQLエンジンによって誤解される可能性のある文字列の文字を識別できます。これらのキャラクターは、SQLステートメント構造の特別な重要性を失います。

注意すべきこと

  1. 接続が確立されている必要がありますREAL_ESCAPE_STRINGはデータベース接続状態によって異なり、接続の前に呼び出されないでください。

  2. アプリケーションの範囲:この関数は、弦楽器の脱出にのみ適しており、より安全な準備されたステートメントを置き換えることはできません。

  3. 前処理ステートメントを使用することをお勧めしますREAL_ESCAPE_STRINGは効果的ですが、SQLクエリにMySQLIまたはPDOからのプリプロセシングステートメントを使用することをお勧めします。

  • 関連タグ:

    SQL