2010-09-20 48 views
2
public function receiveDomainNames($keyword) 
{ 
    try 
    { 
    $stmt = $this->_dbh->prepare("SELECT d.someField FROM domain d WHERE d.someField LIKE :keyword"); 
    $someField = '%'.$keyword.'%'; 

在这种情况下,我们是否需要转义$关键字?PDO准备陈述:我们需要逃脱吗?

在PHP手册中,我们可以读到:

如果应用程序独占地使用预处理语句,开发人员可以 确保将 没有出现SQL注入(的 的但是,如果其他部分查询正在构建与 未转义的输入,SQL注入是 仍然可能)。

这是对你的意见的情况下,是,在此情况下,建立转义输入(无既往治疗已经取得了我们的$关键字参数)?

由于提前, MEM

+0

实际上,我在我们的$关键字参数中使用filter_input和FILTER_SANITIZE_STRING(在他到达此处之前) - 所以我认为在那里不需要转义? – MEM 2010-09-20 10:13:07

+0

可能出现[用于PDO语句的转义参数?](http://stackoverflow.com/questions/2874636/escape-arguments-for-pdo-statements) – outis 2012-04-27 19:25:37

回答

1

鉴于上述的SQL语句,我看到一个SQL注入的不理性的可能性。

什么是“其他部分”的警告将是一个SQL查询,如:

$binds = array(":id"=>$_GET['id']); 
$myPDO->prepare("SELECT {$_GET['columns']} FROM {$_GET{['table']} WHERE id = :id"); 
$statement = $myPDO->execute($binds); 

的例子就是他们的意思最坏情况/明显的例子,是天真的人可能会认为因为他们是逃避那里的论点,一切都是安全的。

用上面的例子,没有未转义的输入,所以你很安全。

0

如果应用程序独占地使用预处理语句,开发商 可以肯定的是不会发生的SQL注入(然而,如果查询的其他 部分被建造了转义输入,SQL 注入仍然是可能的)。

我想你创建的变量不应该逃脱,因为你知道他们在做什么。

只能从用户获取内容,如$ _COOKIE,$ _POST,$ _GET和其他参数(如URL)。