当前位置:  开发笔记 > 编程语言 > 正文

正则表达式作为对抗XSS的第一道防线

如何解决《正则表达式作为对抗XSS的第一道防线》经验,为你挑选了1个好方法。

我有一个正则表达式作为对抗XSS的第一道防线.

public static function standard_text($str)
{
    // pL matches letters
    // pN matches numbers
    // pZ matches whitespace
    // pPc matches underscores
    // pPd matches dashes
    // pPo matches normal puncuation
    return (bool) preg_match('/^[\pL\pN\pZ\p{Pc}\p{Pd}\p{Po}]++$/uD', (string) $str);
}

它实际上来自Kohana 2.3.

这在公共输入的文本上运行(没有HTML),并且如果它未通过此测试则拒绝输入.文本始终显示htmlspecialchars()(或更具体地说,Kohana的味道,它添加其他东西的字符集).我也提出了一个strip_tags()输出.

当他想要用括号输入一些文本时,客户端出了问题.我考虑过修改或扩展帮助程序,但我也有一个次要的想法 - 如果我允许双引号,我真的有任何理由需要验证吗?

我可以依靠输出的转义吗?



1> Chris Laplan..:

依靠Regexes过滤危险的XSS攻击绝不安全.虽然你不依赖它们,但输出转义和输入过滤,如果使用得当,会杀死所有类型的攻击.因此,当没有真正需要他们的帮助时,将正则表达作为"第一道防线"毫无意义.正如您和您的客户发现的那样,它们只会在使用时复杂化.

长话短说:如果您使用html_entitieshtmlspecialchars逃避输出,您不需要正则表达式,也不需要strip_tags.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有