如何检查字符串是否包含JavaScript代码?

时间:2016-12-29 02:57:52

标签: javascript html

我正在做一个类似网络应用的论坛。允许用户向服务器提交丰富的html文本,例如p标签,div标签等。为了保持格式,服务器将这些标签直接写回用户的浏览器(不用html编码)。因此,我必须进行潜在的危险脚本检查以避免XSS。任何JavaScript代码都应该是危险的,不允许。那么,如何检测它们或任何其他更好的解决方案?

危险示例1:

<script>alert('1')</script>

危险示例2:

<script src="..."></script>

危险示例3:

<a href="javascript:dangerousFunction();">click me</a>

3 个答案:

答案 0 :(得分:0)

您确定有多少脚本样式? 如果您确定,可以将这些样式转换为正则表达式并推送数组,然后使用正则表达式匹配,然后再提交

答案 1 :(得分:0)

使用HTML Parser

您的要求很简单:

  • 您必须禁止所有<script>代码,但请保留一些丰富的HTML代码。
  • 您必须能够在链接中转义内联Javascript。即完全字符串化或剥离不安全的属性。

处理所有这些的正确方法是使用符合现代标准的HTML解析器,该解析器能够语法分析发送的丰富HTML的结构,识别发送的标签并发现属性中的原始值。事实上,正如其中一条评论提到的那样, sanitisation 是如何完成的。

有许多预先存在的HTML解析器,旨在针对XSS不安全的输入。例如,npmjs-xss似乎能够完全符合您的要求:

您甚至可以运行此server-side as a command line utility

大多数语言已经存在类似的库,您应该彻底搜索首选语言的软件包存储库。或者,您可以从命令行直接从js-xss启动子进程并收集结果。

Avoid using regular expressions to parse HTML naively - 虽然大多数HTML解析器最终都使用正则表达式,但是在正确地使用它们之后,它们以相当有限的方式对严格定义好的语法进行操作。

答案 2 :(得分:-3)

使用此正则表达式

<script([^'"]|"(\\.|[^"\\])*"|'(\\.|[^'\\])*')*?<\/script>

用于检测所有类型的<script>代码

但我建议在沙盒模式下使用iframe来显示所有HTML代码,这样做可以防止javascript代码执行任何不良操作。

http://www.w3schools.com/tags/att_iframe_sandbox.asp

我希望这有帮助!