晚上好, 我在表单上验证了PrestaShop。 这个错误反映出来了:
您的模块包含安全问题。 - 确保在插入时始终保护您的数据。例如,确保你有一个带有的整数 显式(int)强制转换,并且该文本受SQL注入保护 感谢pSQL()方法。 - 小心(字符串)不是安全的演员,你必须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 :(得分:4)
Prestashop Addons验证过程非常精致。此错误意味着您应该在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)))));
祝你好运。