-2

重複の可能性:
SQLインジェクションを防ぐための最良の方法は?

私はMYSQLデータベースを使用して1つのPHPプロジェクトで作業しています。SQLインジェクションについて読みましたが、いくつかの基本的な例があります。攻撃したらどうなるでしょうか。

私はこのトピックに不慣れです。ありがとう

4

3 に答える 3

4

伝えるべきことはたくさんありますが、私はただ言います:

要約として:

ここに画像の説明を入力してください

于 2012-11-20T18:17:11.610 に答える
4

基本的に、次のような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()関数を使用する必要があります。

于 2012-11-20T18:17:21.520 に答える
2

「ユーザー」というテーブルがあり、誰かが私のサイトのアカウントに登録しているとします。ユーザー名を入力する'); 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
于 2012-11-20T18:19:14.927 に答える