PHP过滤器库或类

时间:2010-03-03 20:28:29

标签: php html xss validation

我正在为我正在进行的项目提供过滤功能。 我正在考虑使用HTML净化器。但是我担心它的表现。

你们有没有人使用或使用HTML净化器。或者您是否建议使用具有类似功能的其他库或类。

最重要的问题是:

  • utf-8支持
  • xss security

3 个答案:

答案 0 :(得分:2)

如果你想:

  • 确保只允许您指定的HTML标记和属性
  • 并确保获得一些有效的HTML作为输出,

然后我会说HTMLPurifier是适合这项工作的工具。

我已经使用了几次 - 而且我从来没有听说过其他可以很好地完成这类工作的工具。


作为关于表演的旁注:当然,当用户输入HTML时,你是在验证/过滤HTML吗?

我的意思是:

  • 某些HTML由用户输入
  • 使用HTMLPurifier验证/过滤/清除它
  • 并将干净的HTML存储到数据库

每次输出一些HTML数据时都不使用HTMLPurifier,对吗? 这对表演来说太糟糕了^^


哦,还有:您是否尝试为HTMLPurifier激活一些缓存?

请参阅文档中的the Cache section

答案 1 :(得分:0)

如果您正在寻找变量的验证以及过滤器选项,请使用下面的库。

https://github.com/Wixel/GUMP

# Note that filters and validators are separate rule sets and method calls. There is a good reason for this.

require "gump.class.php";

$gump = new GUMP();

$_POST = $gump->sanitize($_POST); // You don't have to sanitize, but it's safest to do so.

$gump->validation_rules(array(
    'username'    => 'required|alpha_numeric|max_len,100|min_len,6',
    'password'    => 'required|max_len,100|min_len,6',
    'email'       => 'required|valid_email',
    'gender'      => 'required|exact_len,1|contains,m f',
    'credit_card' => 'required|valid_cc'
));

$gump->filter_rules(array(
    'username' => 'trim|sanitize_string',
    'password' => 'trim',
    'email'    => 'trim|sanitize_email',
    'gender'   => 'trim',
    'bio'      => 'noise_words'
));

$validated_data = $gump->run($_POST);

if($validated_data === false) {
    echo $gump->get_readable_errors(true);
} else {
    print_r($validated_data); // validation successful
}

答案 2 :(得分:0)

关于跨站点脚本(XSS) - 许多框架都以各种方式帮助解决这个问题。当你自己滚动或者有一些XSS问题时,我们可以利用filter_input_array(在PHP 5> = 5.2.0,PHP 7中可用)。 我通常会将此片段添加到SessionController中,因为所有调用都会在任何其他控制器与数据交互之前通过。以这种方式,所有用户输入在1个中心位置被消毒。 如果这是在项目开始时或数据库中毒之前完成的,那么在输出时你就不会有任何问题......停止垃圾进入,垃​​圾进出。

/* Prevent XSS input */
$_GET   = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
/* I prefer not to use $_REQUEST...but for those who do: */
$_REQUEST = (array)$_POST + (array)$_GET + (array)$_REQUEST;

http://php.net/manual/en/function.filter-input-array.php