2010-09-06 55 views
0

这是否阻止Drupal中的SQL注入?Drupal中的SQL注入

db_query('INSERT INTO {tablename} (field1, field2) VALUES ("%s", "%s")', $field1, $field2); 
+1

完全没有。 – SLaks 2010-09-06 22:07:40

+0

AAAAAAH,而不是我想要的答案。还有什么? :( – jblue 2010-09-06 22:18:08

+0

不是很清楚你在问什么 – 2010-09-06 22:26:14

回答

4

是你的问题“这是我需要做的,以阻止Drupal中的SQL注入吗?”

答案是“几乎,但不完全。”

db_query("INSERT INTO {tablename} (field1, field2) VALUES ('%s', '%s')", 
     $field1, $field2); 

单引号对于SQL中的引用值更为标准。或者,如果您已经通过hook_schema定义了tablename表,则可以使用drupal_write_record来代替,如其他答案所述。 drupal_write_record的好处是,你不必应付任何SQL,你只是这样做:

$tablename = array('field1' => $field1, 'field2' => $field2); 
drupal_write_record('tablename', $tablename); 
+0

感谢您的建议您的意思是'$ field1 $ field2'可以是原始的$ POST数据根本不会被消毒吗?是否正常?Drupal会采取关心它的一切吗? – jblue 2010-09-07 18:52:13

+0

它们可以是原始的$ _POST数据,是的,我建议使用form api,然后允许你从$ form_state ['values']中取出数据,但是drupal的代码将处理任何如果这些值是固定长度的char/varchar字段,我建议在插入之前检查字符串长度,因为这是一个很好的习惯。 – 2010-09-08 16:12:19

0

我强烈建议使用drupal_write_record()函数而不是SQL指令,SLaks前指出。