2011-08-18 104 views
1

此代碼是否容易受到SQL注入攻擊?此代碼是否容易受到SQL注入攻擊?

$sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_author_email, comment_date_gmt, comment_approved, comment_type, comment_author_url, SUBSTRING(comment_content,1,70) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = '1' AND comment_type = '' AND post_password = '' ORDER BY comment_date_gmt DESC LIMIT 5"; 
+0

這是一個wordpress插件。 – Kyoku

+4

假設'$ wpdb'對象與外界不可觸摸(通常是這樣),我會說你對這個特定的查詢很安全 – Phil

+1

這很難閱讀;您是否在查詢中使用來自不受信任來源的數據? –

回答

2

假設$wpdb對象是從外部(這是在WordPress的大致如此)碰不得的,我說你這個特定查詢的安全。

你真的只需要考慮傳入從外部接收到的任何參數。

Wordpress提供了幾種處理查詢中用戶輸入的方法。請參閱http://codex.wordpress.org/Data_Validation#Database

1

這取決於一些我看不到的東西 - 或者知識淵博程度不足以從您發佈的代碼中知道。 爲了容易受到SQL注入攻擊,您必須在數據庫中輸入非轉義字符串。 (編輯:通常是一個非轉義的,但用戶可定義的字符串)。

我看不到任何地方你的代碼,你已經逃脫了字符串。 PHP爲此提供了一個函數: $ string = mysql_real_escape_string($ string); 然後,該字符串應該是安全的在數據庫查詢中使用。

因此,例如,不使用:

$name = $_GET['name']; 
mysql_query("INSERT INTO table_name VALUES ('$name')"); 

而是使用:

$name = mysql_real_escape_string($_GET['name']); 
mysql_query("INSERT INTO table_name VALUES ('$name')"); 

你「應該」有是「mysql_real_escape_string內沒有漏洞影響到SQL注入提供「功能。

+0

雖然這裏似乎沒有任何用戶提供的輸入數據。只是從(大概)配置文件中讀取表名。 – Thilo

+0

謝謝大家的意見,非常感謝 – Kyoku

相關問題