2011-08-18 109 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