以PHP格式保护所有输入

时间:2015-04-16 15:05:50

标签: php forms security sql-injection prestashop

我的表单有几种类型的输入,包括文本,复选框和广播。我想确保表格是安全的。我使用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 个答案:

答案 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))

这应该给你一些保护。