以 PHP 形式保护所有输入
Secure all inputs in PHP form
我的表单有多种类型的输入,包括文本、复选框和单选框。我想确保表格是安全的。我使用 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() does not protect your code from hacking attempts (SQL injections, XSS flaws and CRSF breaches). You still have to secure your data yourself." 我想我需要通过 trim()、stripslashes()、htmlspecialchars() 来擦除它,但我不知道最有效的方法。
为了防止一阶 SQL 注入,您可以将 PDO 与 mysql 准备好的语句一起使用。
当您想将其显示到 html 页面时,请使用
htmlspecialchars(trim($value), ENT_QUOTES, "UTF-8")`
确保您在响应 header 中正确设置了适当的字符编码,并使用元标记来指示 HTML 的字符编码。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
如果您需要将 html 输出更新回数据库。使用
htmlspecialchars_decode(trim($value))
这应该会给你一些保护。
我的表单有多种类型的输入,包括文本、复选框和单选框。我想确保表格是安全的。我使用 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() does not protect your code from hacking attempts (SQL injections, XSS flaws and CRSF breaches). You still have to secure your data yourself." 我想我需要通过 trim()、stripslashes()、htmlspecialchars() 来擦除它,但我不知道最有效的方法。
为了防止一阶 SQL 注入,您可以将 PDO 与 mysql 准备好的语句一起使用。 当您想将其显示到 html 页面时,请使用
htmlspecialchars(trim($value), ENT_QUOTES, "UTF-8")`
确保您在响应 header 中正确设置了适当的字符编码,并使用元标记来指示 HTML 的字符编码。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
如果您需要将 html 输出更新回数据库。使用
htmlspecialchars_decode(trim($value))
这应该会给你一些保护。