4

タイトルが言うように:このコードはSQLインジェクションから十分に安全ですか?

SQLインジェクションを防ぐためのより良い方法はありますか?

<?php
$hostname   = "xxx";
$username   = "xxx";
$dbname     = "xxx";

$password   = "xxx";
$usertable  = "xxx";
$yourfield  = "xxx";

$db = new PDO('mysql:host='.$hostname.';dbname='.$dbname.'', $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$query = $db->prepare("INSERT INTO `$usertable` (first_name, last_name, username) VALUES (:first_name, :last_name, :username)");
$query->bindValue(':first_name', $_POST['first_name']);
$query->bindValue(':last_name',  $_POST['last_name']);
$query->bindValue(':username',   $_POST['username']);

$query->execute();
?>
4

3 に答える 3

5

上記のコードのように準備ステートメントのみを使用する場合は、安全です。SQLインジェクションでサイトをハッキングする可能性は他にありません。

prepareステートメントはコマンドからのデータを占有するため、SQLステートメントの一部としてコンテンツを実行することはできません。

于 2013-03-24T10:52:19.810 に答える
1

はい、準備されたクエリは通常、SQLインジェクションからほぼ100%安全です。ただし、 ;にもdata_type引数を渡すことをお勧めします。PDO::bindParam()

参照:SQLインジェクションに対して100%安全な準備済みクエリ

于 2013-03-24T10:52:23.007 に答える
1

Yes this PDO code safe enough from SQL injection.

于 2013-03-24T10:52:24.490 に答える