2010-09-20 45 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)。