重複の可能性:
SQLインジェクションを防ぐための最良の方法は?
私はMYSQLデータベースを使用して1つのPHPプロジェクトで作業しています。SQLインジェクションについて読みましたが、いくつかの基本的な例があります。攻撃したらどうなるでしょうか。
私はこのトピックに不慣れです。ありがとう
重複の可能性:
SQLインジェクションを防ぐための最良の方法は?
私はMYSQLデータベースを使用して1つのPHPプロジェクトで作業しています。SQLインジェクションについて読みましたが、いくつかの基本的な例があります。攻撃したらどうなるでしょうか。
私はこのトピックに不慣れです。ありがとう
基本的に、次のようなSQL呼び出しがある場合:
"DELETE FROM Users WHERE InputtedName = '$name'"
人々はフォームに入力することができます:My Name' OR InputtedName != 'My Name
これにより、$ nameがフォームから入力された名前に置き換えられると、次のSQL呼び出しが発生します。
"DELETE FROM Users WHERE InputtedName = 'My Name' OR InputtedName != 'My Name'"
それはあなたのテーブルのすべてを削除するでしょう!良くない!したがって、これを防ぐには、ユーザーが入力したすべてのデータに対してmysql_real_escape_string()関数を使用する必要があります。
「ユーザー」というテーブルがあり、誰かが私のサイトのアカウントに登録しているとします。ユーザー名を入力する'); drop table Users
と、INSERTステートメントが早期に終了し、usersテーブルが削除されます。
経験則として、ユーザーから受け取ったデータを「サニタイズ」することをお勧めします。これを行うには、PHPのmysql_real_escape_string(非推奨)を使用する必要があります。さらに良いオプションは、プリペアドステートメントですが、それらは長く、常に優雅であるとは限りません。
$stmt = $mysqli->prepare('select name from users where id = ?');
$stmt->bind_param($id,'s');
$id = 'some_id';
$stmt->execute();
$stmt->bind_result($name);
$stmt->fetch(); //variable $name now has the value of the first result