Regex XSS正则表达式

Regex XSS正则表达式,regex,security,xss,Regex,Security,Xss,什么是可用于确定字符串是否存在XSS(跨站点脚本)安全风险的正则表达式?根据使用该字符串的上下文查找任何未编码的 例如,如果字符串是作为HTML页面的一部分打印出来的,那么特殊的HTML字符、“和”可能是XSS风险 如果它是通过JSON传递的,那么“和”可能是XSS风险 如果它包含在SQL语句中(实际上不应该包含,至少不应该直接使用参数化查询),那么类似于和反勾号可能是一个问题 等等。永远不可能有一个防弹函数来停止所有的XS,正则表达式不是最好的选择。XSS高度依赖于页面上的位置并限制字符,例如

什么是可用于确定字符串是否存在XSS(跨站点脚本)安全风险的正则表达式?

根据使用该字符串的上下文查找任何未编码的

例如,如果字符串是作为HTML页面的一部分打印出来的,那么特殊的HTML字符
可能是XSS风险

如果它是通过JSON传递的,那么
可能是XSS风险

如果它包含在SQL语句中(实际上不应该包含,至少不应该直接使用参数化查询),那么类似于
和反勾号可能是一个问题


等等。

永远不可能有一个防弹函数来停止所有的XS,正则表达式不是最好的选择。XSS高度依赖于页面上的位置并限制字符,例如
是一个良好的开端,但决不是一个全面的解决方案。即使停止这些字符,也有恶意href:
javascript:alert(/XSS/)
和事件处理程序的注入:
onload=alert(/xss/)
,如果您筛选列出的4个字符,则其中一个将停止


由数千个正则表达式组成,并且一直被忽略。

启用用户生成格式的标准方法是禁用所有标记(通过对所有尖括号进行html编码),然后“重新添加”“您希望允许的标记。正如@marcog所建议的,可能已经有框架可以做到这一点,因为这是一项比最初看起来更困难的任务。更好的选择是简单地使用非HTML的格式化标记,比如Markdown(StackOverflow使用的)或BBCode(如果您更喜欢基于标记的系统)让您不必担心不安全的HTML标记。@Amber您仍然需要注意生成的HTML是安全的。当你有一个东西从一个函数跳到另一个函数编码/解码/翻译时,可能很难找到错误。标记等东西通常无法生成
script
标记之类的东西。因此,流程通常是“去除所有HTML特殊字符->进程标记”-因为“进程标记”步骤不能引入任何不安全的HTML,它大大简化了过程。应该注意的是,即使您执行了所有这些操作,XSS仍然是一个问题。上下文是,我需要确定代码生成的字符串是否包含符合XSS条件的文本。我在网上看到过一些例子,但我想知道是否有人有一个经过验证的正规快车可以借我?