【发布时间】:2013-01-23 00:27:23
【问题描述】:
通常,我使用 PDO 的预处理语句、类型转换为 (int) 或 PDO::quote() 来防止 SQL 注入。对于此应用程序,我需要先使用 PHP 修改日期,然后再将其添加到查询中。我是否需要采取额外的措施来防止 SQL 注入,或者我是否安全?谢谢
$date = new DateTime($_GET['suspect_user_provided_date']);
$date->add(new DateInterval('P1D'));
$sql='SELECT * FROM table WHERE date<"'.$date->format('Y-m-d').'"';
【问题讨论】:
-
假设
DateTime构造函数没有安全漏洞,我会说你很好。 -
@lc。你还会做一个多余的 PDO::quote() 吗?
-
请注意,从 PHP 5.3 开始,新的
DateTime($someUserValue)可能会引发异常。 // 编辑:对 PDO::quote() 的调用不会是多余的,因为 DateTime 不会做任何事情来使您的值查询安全。但是,该值不包含任何恶意内容。 -
老实说,我会像其他所有东西一样使用准备好的语句和参数,但也许只是我。在这种特殊情况下,它不应该有所作为。一旦它是一个
DateTime对象,你就不应该从中得到任何有趣的东西,如果用户数据很奇怪,则保存一个异常。 -
@DanielM。我可以处理的例外情况。注射我不能!
标签: php