我的表单有几种类型的输入,包括文本,复选框和广播。我想确保表格是安全的。我使用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()来擦除它,但我不知道最有效的方法。
答案 0 :(得分:2)
为了防止第一顺序SQL注入,您可以将PDO与mysql预处理语句一起使用。 当你想将它显示到html页面时使用
htmlspecialchars(trim($value), ENT_QUOTES, "UTF-8")`
确保在响应标头中正确设置了相应的字符编码,并使用元标记指示HTML的字符编码。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
如果您需要将html输出更新回数据库。使用
htmlspecialchars_decode(trim($value))
这应该给你一些保护。