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

Mysql PDO SQL注入(从url获取变量),mysql,pdo,bind,Mysql,Pdo,Bind,我有一个在URL中传递的id(例如id=33)。它总是一个数字 我曾经使用标准的mysql进行连接,并使用escape字符串和int来确保安全等 我正在尝试转到PDO,我认为下面的代码是安全的(工作正常),但如果这里的任何人都可以看一看,如果我错过了任何关于提高安全性的建议,请告诉我,我将非常感激 $pdo = new PDO($dsn, '*****','*****'); $id = $_GET["id"]; $id = filter_var($id, FILTER_SANITIZE_

我有一个在URL中传递的id(例如id=33)。它总是一个数字

我曾经使用标准的mysql进行连接,并使用escape字符串和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);
}
我是否正确地认为上述内容是安全的(使用以下内容来回应数据):


再次感谢您的帮助:)

p、 另一方面,我假设如果我使用:

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

这将提取经过消毒的ID,而不是get语句中的ID

编辑
只是澄清一下,没有用户有权提交数据(这一切都将由我自己通过phpmyadmin完成。他们将看到的唯一一件事是一个名称列表,单击它会将他们带到一个页面(ID在URL中)显示与该名称关联的颜色。

如果您严格遵守使用占位符的规则,则您的数据库安全性不应出现任何问题。PDO将负责正确转义。请注意,这并不意味着您的查询将有效或数据将按预期保存,您可能会遇到截断或转换问题精神错乱


请记住,在显示存储在数据库中的数据时,您需要同样保持警惕,以避免HTML问题和错误。这需要为显示转义数据,例如方法。

是。将
filter_var()
bindParam
相结合是。您正在将其验证为整数(仅保留[0-9]+)。将在输出前验证
color
的值,因为这是用户输入?您好,非常感谢您的反馈,非常感谢。只有ID是用户输入,其他所有内容都手动输入数据库根据您的错误处理,我将检查查询字符串中是否存在
ID
,但这更像是UX POV。谢谢您的帮助:)嗨,所有输入数据库的数据都将由我自己通过phpmyadmin完成。没有用户将有权访问/能够提交数据(没有表单)。用户将看到的唯一一面是带有姓名列表等的前端,单击后,ID将传递到URL中,以便加载人员详细信息(颜色)。您认为我需要对输出进行任何更改以避免任何XSS,因为没有用户输入(URL ID除外)?再次感谢您的帮助。不,您只使用整数进行查找-您已确保它是整数。不过,你的应用程序的其余部分需要仔细检查。只是要小心你所做的任何假设。今天,您控制着数据,但这在未来是否成立?人们犯错误,范围改变。尽量不要在将来给自己留下陷阱,在那里你忘记了逃避一些事情。我通常使用
”测试之类的数据进行测试☃"
以查看引用、HTML转义和UTF-8是否正确处理。您好,数据库中的数据也包含HTML,因此我不确定是否可以做很多事情来限制这一点。但是,数据库用户是一个只有读取权限的独立用户,因此,如果发现漏洞,应该(我相信)停止任何编辑(如果我错了,请纠正我)。
<?php echo ($result['id']);?>