【问题标题】:PrestaShop Validator: SQL security issuesPrestaShop Validator:SQL 安全问题
【发布时间】:2016-12-01 15:49:05
【问题描述】:

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

你见过这样的事吗?

【问题讨论】:

  • 好吧,你并没有逃避你的价值观,你不想分发一个带有 SQL 注入的模块,对吗?

标签: php mysql security prestashop prestashop-1.6


【解决方案1】:

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

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

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)))));

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 2018-11-09
    相关资源
    最近更新 更多