PDO SQL注入(从url获取变量)

时间:2015-03-02 16:53:10

标签: mysql pdo bind

我有一个在网址中传递的ID(例如id = 33)。它始终是一个数字。

我曾经使用标准的mysql连接并使用转义字符串和int来实现安全等。

我正在努力进入PDO,我认为下面的代码是安全的(工作正常),但我真的很感激,这里的任何人都可以看看并告诉我,如果我错过了任何/任何建议提高安全性。

$pdo    = new PDO($dsn, '*****','*****');

$id = $_GET["id"];
$id = filter_var($id, FILTER_SANITIZE_NUMBER_INT);  
if (filter_var($id, FILTER_VALIDATE_INT)) {  
$sql    = $pdo->prepare("SELECT * FROM table WHERE id = :id LIMIT 1");
$sql->bindParam(":id",$id);
$row    = $sql->execute();
$result = $sql->fetch(PDO::FETCH_ASSOC);
}

我认为以上是安全的(使用以下内容来回显数据)是正确的:

<?php echo ($result['colour']);?>

再次提前感谢任何帮助:)

P.S。在附注中,我假设我使用过:

<?php echo ($result['id']);?>

这会将已清理的ID从get语句中拉出来吗?

EDIT 只是为了澄清,没有用户可以访问提交数据(这将全部由我自己通过phpmyadmin完成。他们唯一能看到的是名单列表,点击后它会将他们带到一个页面(在URL中有ID) )显示与名称相关的颜色。

1 个答案:

答案 0 :(得分:1)

如果您对使用占位符有规定,则不应该对数据库安全性有任何问题。 PDO将负责妥善逃避事情。请注意,这并不意味着您的查询有效或数据将按预期保存,您可能会遇到截断或转换问题。

请记住,您需要对呈现数据库中存储的数据保持警惕,以避免HTML问题和XSS problems。这需要转义数据以进行演示,例如htmlspecialchars方法。