正则表达式检测字符串中的 Javascript
Posted
技术标签:
【中文标题】正则表达式检测字符串中的 Javascript【英文标题】:Regex to detect Javascript In a string 【发布时间】:2010-12-04 00:09:30 【问题描述】:我正在尝试在我的查询字符串值中检测 javascript。
我有以下 c# 代码
private bool checkForXSS(string value)
Regex regex = new Regex(@"/((\%3C)|<)[^\n]+((\%3E)|>)/I");
if (regex.Match(value).Success) return true;
return false;
这适用于检测<script></script>
标签,但不幸的是,如果没有标签,则无法达到匹配。
正则表达式是否可以匹配 JavaScript 关键字和分号等?
这并不意味着涵盖所有 XSS 攻击基地。只是一种检测可以在字符串值中的简单 JS 攻击的方法。
谢谢
【问题讨论】:
好的,然后你必须检测子字符串“onmouseover”等的存在...阅读我的帖子***.com/questions/1520973/… 【参考方案1】:第 1 条规则:使用白名单,而不是黑名单。
您正在阻止一种执行 XSS 的方法,而不是任何一种。为此,您必须根据您应该接受的用户输入来验证输入,即
如果您需要一个数字,请根据/^\d1, n$/
验证输入
如果您需要一个字符串,请根据 /^[\s\w\.\,]+$/
等验证它...
欲了解更多信息,请开始阅读Wikipedia entry、entry at OWASP、webappsec articles 和一些随机的blog entries written by unknown people
【讨论】:
可悲的是没有人能听到“不知名的人”的笑话【参考方案2】:这是一种非常蹩脚的防止跨站点脚本攻击的方法。您需要使用完全不同的方法:确保用户提供的输入是:
经过验证,使其与正在收集的数据的语义相匹配;
每次用于构造表达式以由某些语言解释器(SQL、html、Javascript - 即使转到纯文本日志文件时)解释时,都会适当引用。适当的引用完全取决于输出上下文,没有单一的方法可以做到。
【讨论】:
我正在选择一个现有的应用程序,其中查询字符串被放置到页面中。我需要检查 javascript 的值,例如警报、功能、事件等和 HTML。我上面的正则表达式检查标签,但不检查 JS 关键字等。我想在将 JS 放入页面之前将其剥离。 对不起,我真的不明白这是什么意思。【参考方案3】:嵌入 javascript 的方法有很多。例如
%3Cp+style="expression(alert('hi'))"
将通过您的过滤器。
你可能找不到一个能找到所有 JS 并且不会拒绝很多有效查询字符串的神奇正则表达式。
这种检查可能有用,但它应该只是纵深防御的一部分。
【讨论】:
【参考方案4】:检查<script
标签是否存在就足够了。
private bool checkForXSS(string value)
return value.IndexOf("<script") != -1;
【讨论】:
错误。onclick
、onmouseover
等可以不带脚本标签而存在。
我能想到一些其他的方法来规避这个问题;这是一个糟糕的方法。以上是关于正则表达式检测字符串中的 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
Javascript/jQuery - 使用正则表达式解析字符串中的主题标签,URL 中的锚点除外