2011-11-23 112 views
0

可能重复:
Remove JavaScript with RegexJava的正则表达式<script>标签从URL删除

如何删除<script之间的所有内容....而且...... </script>? 如果我写:

s = s.replaceAll("<script.+</script>", ""); 

它消除了第一<script直到最后</script>之间的一切,但我想从第一<script删除,直到第一</script> 请帮助

+1

如果这应该是一个安全措施,那么它将无法运作 –

+0

@OttoAllmendinger - 作为一项安全措施,我认为它不可能被做成傻瓜证明,但它当然可以被用来破解和使任何绕过安全措施的尝试失效,并且可以优雅有效地删除正确格式化的脚本 –

回答

2

它通常是一个坏主意使用正则表达式来解析HTML —有无数个角落案例,并且需要花费大量精力(如果您的输入是<!-- <script> --> foo <!-- </script> -->?)—但回答您的特定问题:更改+,这是一个“贪婪”量词,尽可能多地使用它,它是一个“不情愿”的量词,尽量少用。

请参阅http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

+0

Thx,尝试了DOM解析,但没有为我工作)我不允许使用第三方库,所以尝试用正则表达式来做到这一点 – user1062317

0

我在过去的这个建议:

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

使用“单行”或“DOTALL”编译器开关,适用于您的语言或工具。

欲了解更多信息,请参阅我的答案在这里:应该这样做无非是为了使它更难被它成功地得到的东西https://stackoverflow.com/q/8043367/561690

在回应的意见,我所做的更改。至于<script之间的任何空格 - 我不会把它放在某个人的旁边,以便在构建解析器时忽略建议(Standard?)的那部分内容,以使其更加灵活,因此我将它作为部分我的回答!

+0

你对我的看法很奇怪。 “<”和“script”之间的空格将使该标签无效;并且''之间的空格不限于单个字符。 – ruakh

+0

在这你可能是绝对正确的。然而,用户是全新的品牌,并且提出了一个与所引用的问题相同的所有实际意图和目的的问题 - 因此存在ROI问题。我会做出你所建议的改变,但我怀疑它没有太大的区别!不管谢谢! –

+2

这会将' cript> alert(1337)'转换为''。 –

0

OWASP Java HTML Sanitizer是由OWASP赞助的一种HTML清洁工具,它使用Java语言编写,该工具使用一串HTML和白名单标记和属性来生成一串安全的HTML。

它经历了多轮攻击审查,并与AntiSAMY适合相同的利基。

完全披露:我是一名维护者。