我正在使用PDO包来管理我的应用程序数据库。我使用PDO::prepare
,PDOStatement::execute
和一些时候的PDO::quote
,PDO::query / PDO::exec
来执行我的查询
PDO::prepare
和PDO::quote
是完全安全的吗?或者我是否应该做更多的工作来正确地验证我的inputs.not,只针对数据库,而对于php代码,要么谢谢
发布于 2017-06-09 09:28:51
使用prepare()
没有什么神奇之处。您可以将不安全的变量插入到字符串中,然后准备该字符串。Boom-SQL注入。准备一个语句并不意味着它是安全的。
$stmt = $pdo->prepare("SELECT * FROM MyTable WHERE id = {$_POST['id']}"); // UNSAFE!
使其安全的是使用参数。
$stmt = $pdo->prepare("SELECT * FROM MyTable WHERE id = ?");
$stmt->execute([$_POST['id']]); // SAFE!
自然,人们说“使用预准备语句”,因为您必须使用预准备语句来使用参数。但是,仅仅说“使用准备好的语句”有点误解,一些开发人员得到了错误的理解。
PDO quote()方法也是安全的,但我发现它更简单,更容易使用参数。
$idQuoted = $pdo->quote($_POST['id']);
$stmt = $pdo->prepare("SELECT * FROM MyTable WHERE id = $idQuoted");
https://stackoverflow.com/questions/44446229
复制相似问题