2016-02-12 144 views
0

我的網站是基於Wordpress的。爲了防止SQL注入,我需要在查詢之前清理數據。我對此有幾點疑問。這是防止SQL注入Wordpress查詢的最佳方法

1 /我在某處讀到了一個stackoverflow,有人說如果我們使用get_results()來查詢,我們不需要準備()sql查詢,因爲數據已經被清理了。所以我不確定我們必須使用prepare()以及哪種情況我們不需要使用它。

$sql = prepare(....query...); 
$wpdb->get_results($sql); 

2 /難道我們使用$wpdb->update()$wpdb->insert()$wpdb->get_row()準備()......或者我們只是使用準備()的自定義查詢這樣$wpdb->query($wpdb->prepare(...query...))

3 /說我有一個變量$data = $_POST['data']。在將數據放入查詢之前,應使用以下最佳方法來清理數據。

esc_sql($data); 

sanitize_text_field($data); 

mysql_escape_string($data); 

還是其他什麼東西?

4 /是否有任何安全查詢,我們不需要爲它清理數據,或者我們必須在將所有數據放入查詢之前清理所有數據?

謝謝。

回答

1

通常的規則似乎是:像get_results這樣的函數接受一個查詢,該查詢可能是一個字符串或者調用prepare(它也可能是一個字符串)的返回值。當你自己構建這個字符串時,你不應該使用用戶提供的變量而不會轉義。 The preferred way to escape it is through prepare.可能有其他功能有能力做轉義,但我會建議你堅持prepare(很少esc_sql)。

按照上面的鏈接,傳遞給insertupdate數據不需要被轉義,因爲這些會做轉義爲您服務。請注意,這僅適用於第二個參數(第三個參數爲update)。