public function receiveDomainNames($keyword)
{
try
{
$stmt = $this->_dbh->prepare("SELECT d.someField FROM domain d WHERE d.someField LIKE :keyword");
$someField = '%'.$keyword.'%';
在这种情况下我们是否需要转义$ keyword?
在php手册上我们可以阅读:
如果应用程序专门使用预准备语句,则开发人员可以 确保没有SQL注入 发生(然而,如果发生的其他部分 正在构建查询 未转义的输入,SQL注入是 仍然可能)。
您的意见是否属于这种情况,是否会构建未转义的输入(我们的$ keyword参数没有事先处理过)?
提前致谢, MEM
答案 0 :(得分:1)
鉴于上述SQL语句,我认为没有合理的SQL注入可能性。
关于“其他部分”的警告是什么样的SQL查询:
$binds = array(":id"=>$_GET['id']);
$myPDO->prepare("SELECT {$_GET['columns']} FROM {$_GET{['table']} WHERE id = :id");
$statement = $myPDO->execute($binds);
这个例子是他们所说的最坏情况/明确的例子,天真地有人可能会想到,因为他们逃避了where参数,一切都是安全的。
使用上面的示例,没有未转义的输入,因此您是安全的。
答案 1 :(得分:0)
如果应用程序专门使用预准备语句,则开发人员 可以确定不会发生SQL注入(但是,如果是其他的话) 部分查询是使用未转义的输入SQL构建的 注射仍然可能)。
我想知道您创建的变量不应该被转义,因为您知道他们正在做什么。
仅从用户获取转义内容,例如$ _COOKIE,$ _POST,$ _GET和其他参数,例如网址。