【发布时间】:2015-04-16 15:05:50
【问题描述】:
我的表单有几种类型的输入,包括文本、复选框和单选。我想确保表格是安全的。我使用 Prestashop 函数 isGenericname 和 isCleanHTML 通过确保字段有效来检查文本和注释字段。
Prestashop Validate.php
public static function isGenericName($name)
{
return empty($name) || preg_match('/^[^<>={}]*$/u', $name);
}
public static function isCleanHtml($html, $allow_iframe = false)
{
$events = 'onmousedown|onmousemove|onmmouseup|onmouseover|onmouseout|onload|onunload|onfocus|onblur|onchange';
if (preg_match('/<[\s]*script/ims', $html) || preg_match('/('.$events.')[\s]*=/ims', $html) || preg_match('/.*script\:/ims', $html))
return false;
if (!$allow_iframe && preg_match('/<[\s]*(i?frame|form|input|embed|object)/ims', $html))
return false;
return true;
}
这是以 PHP 文件形式调用函数的方式。
if (!Validate::isCleanHtml($message))
$this->errors[] = Tools::displayError('Invalid message');
elseif (!Validate::isGenericName($fname))
$this->errors[] = Tools::displayError('Invalid First Name.');
所以我的问题是。可以不对无效的复选框和单选框等输入产生错误消息吗?它们无效的唯一原因是如果有人在发送之前破解了他的代码。还是有更好的方法来剥离和保护输入?
$checkbox = Tools::getValue('checkbox ');
if (!Validate::isGenericName($checkbox ))
$validCheckbox = $checkbox;
我有 68 个输入,我想确保它们是安全的。是否有一个很好的 PHP 函数可以去除和阻止任何类型的 SQL 注入? Prestashop 文档指出“getValue() 不能保护您的代码免受黑客攻击(SQL 注入、XSS 缺陷和 CRSF 破坏)。您仍然必须自己保护您的数据。”我想我需要通过 trim()、stripslashes()、htmlspecialchars() 来清理它,但我不知道最有效的方法。
【问题讨论】:
-
网络软件的#1 规则:永远永远永远信任客户端提交的任何内容。假设 EVERYTHING 是恶意的/敌对的/坏的/无效的,并适当地处理它。 stackoverflow.com/questions/60174/…
-
您必须根据自己的操作来清理您的输入 - 如果您将其直接放入数据库,
htmlspecialchars()可能不会有很大帮助,但它会如果您将数据发送到屏幕上(无论如何都是 HTML),则可以提供帮助……即使是 HTMLPurifier 之类的库也不一定有助于抵御 SQL 注入攻击。恐怕这里没有灵丹妙药,不要相信任何东西,并以最合适的方式清理一切。 -
你还必须确保你处理像Preventing SQL Injection这样的事情
-
68 个字段...我建议这样:php.net/manual/es/function.array-map.php#102130 但是 - 它不是 100% 安全的并且:php.net/manual/en/function.mysql-real-escape-string.php... 你应该知道你期望什么值 - 所以,您可以检查收到的值 == 预期值。 E,克。对于复选框或单选按钮组,您可以制作您期望的值数组('option1','option2',...'optionX') - 如果 $_POST 值不在'expected values'数组中 -> 停止脚本/submission... 这可能效率不高,但很安全。
-
好的,所以 Prestashop 使用 PDO 来防止 SQL 注入。我可以添加我谈到的所有三个功能吗? $fname= htmlspecialchars(strip_tags(trim(Tools::getValue('fname'))));
标签: php forms security sql-injection prestashop