我正在开发一个web应用程序,用户可以在其中响应博客条目。这是一个安全问题,因为它们可以发送危险的数据,这些数据将呈现给其他用户(并由javascript执行)。
他们不能格式化他们发送的文本。没有“粗体”,没有颜色,什么都没有。只是简单的文本。我想出这个正则表达式来解决我的问题:
[^\\w\\s.?!()]因此,任何不是单词字符(a-Z、A-Z、0-9)、不是空格、".“、"?”、"!“、"(”或")“的内容都将被替换为空字符串。则每个引号将被替换为:“。
我在前端检查数据,然后在我的服务器上检查。
有没有办法绕过这个“解决方案”?
我想知道StackOverflow是怎么做这件事的?这里有许多格式,所以他们必须做好它的工作。
发布于 2010-05-07 02:04:06
如果你只想要简单的文本,不用担心过滤特定的html标签。你想要的等同于PHP的htmlspecialchars()。使用此函数的一个好方法是print htmlspecialchars($var,ENT_QUOTES);此函数将执行以下编码:
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'这在最低级别上解决了XSS的问题,并且您不需要一些您不理解的复杂的库/正则表达式(毕竟复杂性是安全性的敌人,而且可能是不安全的)。
确保通过运行free xss scanner对XSS FILTER进行测试。
发布于 2010-05-07 01:52:49
我同意Tomalak的观点,只想补充几点。
发布于 2010-05-24 22:07:15
我推荐阅读the XSS Prevention Cheat Sheet,它详细介绍了避免XSS攻击的最佳实践。从本质上讲,您需要过滤的内容取决于要使用它的上下文。
例如,在这种情况下:
<body>...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...</body>您需要做的是:
& --> &
< --> <
> --> >
" --> "
' --> ' ' is not recommended
/ --> / forward slash is included as it helps end an HTML entity而在href=""的例子中,你需要做一个the转义:
“除字母数字字符外,使用
%HH转义格式对ASCII值小于256的所有字符进行转义。在数据中包括不受信任的数据:不允许使用URL,因为没有很好的方法通过转义来禁用攻击以防止切换出URL。所有属性都应用引号括起来。未加引号的属性可以用许多字符分隔,包括空格%*+、-/;<=>^和|。请注意,实体编码在此上下文中无用。”
虽然引用的文章给出了完整的结论,但希望这个答案中有足够的信息来帮助您入门。
https://stackoverflow.com/questions/2781574
复制相似问题