2013-03-27 63 views
0

我發現一個similar question,但它並沒有真正給我我正在尋找的答案。 This tutorial解釋了WordPress使用的最重要的衛生功能。插入到自定義表格時,我仍然應該轉義數據嗎?

我正在使用PDO將表單數據存儲到自定義表中。很多這些數據包含名稱,如l'thisCotélac & Blancé

如果我把電子郵件和url字段放在一邊,是否足以使用esc_attresc_html來激發SQL注入和跨站點腳本?

我應該在數據保存到數據庫之前使用它嗎?或者在我將它放到屏幕前?

//From Wordpress 
esc_html -> Escaping for HTML blocks 
esc_attr -> Encodes the <, >, &, " and ' 

這是我用一個典型的查詢:

$sql = " SELECT name 
     FROM name 
     WHERE user_name = :user_name 
     AND fk_ID = :some_id "; 

$stmt = $this->db->prepare($sql); 
$stmt->bindParam(':user_name', $name, PDO::PARAM_STR); 
$stmt->bindParam(':some_id', $some_id, PDO::PARAM_STR); 
$stmt->execute(); 

$result = $stmt->fetchAll(); 
return $result; 

// alternative (from another query) 
$stmt = $this->db->prepare($sql); 
$stmt->execute(array(':id'=> $id)); 
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

return $result; 
+0

取決於*如何*您在使用PDO – 2013-03-27 14:04:10

+0

@YourCommonSense我已經更新了查詢例如 – Steven 2013-03-27 14:10:59

+1

問題,你可能想讀這樣的:HTTP://計算器.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection – 2013-03-27 14:14:14

回答

1

既然你已經標記wordpress,我想補充一點沒有處理所有這些的$wpdb class。您可以使用$wpdb->prepare來幫助您。

從食品的例子:

$wpdb->query($wpdb->prepare( 
    " 
     INSERT INTO $wpdb->postmeta 
     (post_id, meta_key, meta_value) 
     VALUES (%d, %s, %s) 
    ", 
     10, 
    $metakey, 
    $metavalue 
)); 
+0

是的,我知道。不幸的是,我在開始這2年後想到了這一點(並且我多瞭解WP)。所以現在有幾千行SQL查詢。另一方面,如果需要/時間到,不使用'$ wpdb'可以讓我更容易地通過不同的系統移植代碼。即使我使用'$ wpdb',我仍然應該轉義一些數據? – Steven 2013-03-27 14:15:41

+0

如果您使用'$ wpdb','prepare'方法將爲您做必要的工作。如果有疑問,你可以硬編碼一些值並嘗試將它添加到你的wordpress數據庫中,只是爲了看到$ wpdb類的工作方式如何。 – RRikesh 2013-03-27 14:18:10

+0

好的。但是讓我們假設我目前還沒有計劃使用'$ wpdb',那麼您如何解決上述問題? – Steven 2013-03-27 14:22:14

相關問題