gpt4 book ai didi

php - 正则表达式作为抵御 XSS 的第一道防线

转载 作者:可可西里 更新时间:2023-10-31 22:49:45 24 4
gpt4 key购买 nike

我有一个正则表达式作为抵御 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 .

这运行在公共(public)输入的文本上(从来没有 HTML),如果它没有通过这个测试则拒绝输入。文本始终显示为 htmlspecialchars()(或更具体地说,Kohana's flavour,它添加了字符集等)。我还在输出上放置了一个 strip_tags()

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

我可以只依赖输出转义吗?

最佳答案

依靠正则表达式来过滤危险的 XSS 攻击从来都不是安全的。尽管您不依赖它们,但如果使用得当,输出转义和输入过滤将杀死各种攻击。因此,当真正不需要正则表达式的帮助时,将正则表达式作为“第一道防线”是没有意义的。正如您和您的客户所发现的,像这样使用它们只会使事情复杂化。

长话短说:如果您使用 html_entitieshtmlspecialchars 来转义您的输出,您不需要正则表达式,也不需要 strip_tags 要么。

关于php - 正则表达式作为抵御 XSS 的第一道防线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com