2016-12-01 64 views
0

晚上好, 我在我的表单上验证了PrestaShop。 错误反映:PrestaShop验证器:SQL安全问题

您的模块包含安全问题。 - 确保您的数据在进行插入时始终受到保护。例如,确保您有一个带有 explicit(int)强制转换的整数,并且由于使用了pSQL()方法,该文本不受SQL注入的影响 。 - 小心(字符串)不是一个安全的演员,你必须pSQL。

插入查询我使用如下:

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_list_filter (name, content) VALUES ("'.$t['filter_template_name'].'","'. str_replace('"', '\"', serialize($t)).'")'); 

Db::getInstance()->execute('INSERT IGNORE INTO `'._DB_PREFIX_.'ff_people` (`field`,`list`) VALUES ("'.$c->email.'",'.$listId.')'); 

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_custom_field (field, list) VALUES ("'.$field.'"," ","'.$list.'")'); 

你见过这样的事情?

+0

那么你不是逃避你的价值观,你不想分发一个SQL注入模块吗? – TheDrot

回答

4

Prestashop插件的验证过程非常精致。这个错误意味着你应该在你的SQL语句中使用所有你使用的外部参数。应该是这样的:

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_list_filter (name, content) VALUES ("'. pSQL($t['filter_template_name']).'","'. pSQL(str_replace('"', '\"', serialize($t))).'")'); 

如果你有PARAMS类型不为字符串,你应该直接转换为相应的类型:

Db::getInstance()->execute('INSERT IGNORE INTO '._DB_PREFIX_.'ff_list_filter (name, content) VALUES ("'. (int) $t['id_int'].'","'. pSQL(str_replace('"', '\"', serialize($t))).'")'); 

其他建议。您可以在插入,更新和删除句子中使用更多Prestashop的DB类。这样可以避免简单的引号错误或类似错误:

Db::getInstance()->insert('ff_list_filter', array('name' => pSQL($t['filter_template_name']), 'content' => pSQL(str_replace('"', '\"', serialize($t))))); 

祝你好运。

+0

非常感谢 –