2016-12-01 2 views
0

Добрый вечер, Я проверяю PrestaShop на мою форму. Ошибка отражена:PrestaShop Validator: проблемы безопасности SQL

Ваш модуль содержит проблемы с безопасностью. - Убедитесь, что ваши данные всегда защищены при вставке. Например, убедитесь, что у вас есть целое число с явным (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

Ну, вы не избегаете своих значений, вы не хотите распространять модуль с SQL-инъекциями по всему, не так ли? – TheDrot

ответ

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))).'")'); 

Дополнительное предложение. Вы можете использовать более класс DB Prestashop в предложениях вставки, обновления и удаления. Таким образом, избегайте простых котировок или подобных ошибок:

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

Удачи.

+0

большое спасибо –