PrestaShop Validator:SQL安全问题

时间:2016-12-01 15:49:05

标签: php mysql security prestashop prestashop-1.6

晚上好, 我在表单上验证了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.'")');

你有没有见过这样的东西?

1 个答案:

答案 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)))));
祝你好运。