-3

重複の可能性:
PHP で SQL インジェクションを防ぐ最善の方法は?

私のコードの問題です。

$yeri=フィルタなし;

mysql_query("Insert Into deney (vid,yazan,email,yorum,ip,tarih,durum,yeri) values ('$id', '$yazan', '$email', '$yorum', '$ip', Now(),'1','$yeri')");

この問い合わせに対して、攻撃サイトのデータを更新するにはどうすればよいですか? この予防措置をどのように取得しますか。テーブルのデータを更新する方法

4

2 に答える 2

2

代わりに mysqli または PDO を使用してください。

pdo では、コードは次のようになります。これはSAFEです。

$query = $pdo->prepare("Insert Into
    deney (vid,yazan,email,yorum,ip,tarih,durum,yeri)
    values (:id, :yazan, :email, :yorum, :ip, Now(), 1, :yeri)");
$query->execute(array(
    'id' => $id,
    'yazan' => $yazan,
    'email' => $email,
    'yorum' => $yorum,
    'ip' => $ip,
    'yeri' => $yeri
));

このように、PDO はエスケープを行い、SQL インジェクションに対して安全です。

PDO を介して mysql 接続を作成するには、次を使用します。

$pdo = new PDO("mysql:dbname=$dbname", $username, $password);

私は通常、すべてのコードをutf-8で書くのが好きなので、4番目のパラメーターもそれに追加します.4番目のパラメーターは私の場合array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")です.

以下は安全ではありません - 使用しないでください:

$pdo->prepare("Insert Into
        deney (vid,yazan,email,yorum,ip,tarih,durum,yeri)
        values ('$id', '$yazan', '$email', '$yorum', '$ip', Now(), 1, '$yeri')");

mysql_query の使用を主張するが、それが推奨されない場合は、次のようにする必要があります。

mysql_query("Insert Into deney (vid,yazan,email,yorum,ip,tarih,durum,yeri) values ('"
    . mysql_real_escape_string($id) . "', '"
    . mysql_real_escape_string($yazan) . "', '"
    . mysql_real_escape_string($email) . "', '"
    . mysql_real_escape_string($yorum) . "', '"
    . mysql_real_escape_string($ip) . "', Now(),'1','"
    . mysql_real_escape_string($yeri) . "')");
于 2012-10-08T19:07:37.867 に答える
0

古い mysql 拡張機能またはmysqli 拡張機能の準備済みステートメントを使用する必要がある場合は、すべての入力をmysql_real_escape_stringでエスケープする必要があります。

mysql_関数は非推奨であり、可能であれば使用しないでください(あなたの場合は使用する必要があります)。

于 2012-10-08T19:04:32.507 に答える