Real_Escape_StringはMySQLI拡張機能のメソッドであり、主に文字列の特殊文字を逃れるために使用されるため、悪意のあるSQLコードが実行されないようにします。危険な文字の前にバックスラッシュ( \ )を自動的に追加し、SQL構文で特別な意味を失います。
ユーザーの入力がSQLステートメントに直接スプライスされる状況には、入力コンテンツを逃れる必要があります。それ以外の場合、攻撃者は入力を使用して悪意のあるステートメントを作成し、それによりデータベース操作のロジックを変更できます。
以下は、 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エンジンによって誤解される可能性のある文字列の文字を識別できます。これらのキャラクターは、SQLステートメント構造の特別な重要性を失います。
接続が確立されている必要があります: REAL_ESCAPE_STRINGはデータベース接続状態によって異なり、接続の前に呼び出されないでください。
アプリケーションの範囲:この関数は、弦楽器の脱出にのみ適しており、より安全な準備されたステートメントを置き換えることはできません。
前処理ステートメントを使用することをお勧めします: REAL_ESCAPE_STRINGは効果的ですが、SQLクエリにMySQLIまたはPDOからのプリプロセシングステートメントを使用することをお勧めします。
関連タグ:
SQL