从URL </script>中删除Java REGEX <script>标记

时间:2011-11-23 16:27:46

标签: regex xss html-sanitizing removeall

  

可能重复:
  Remove JavaScript with Regex

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

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

它会删除第一个<script到最后一个</script>之间的所有内容,但我想从第一个<script中删除,直到第一个</script> 请帮忙

3 个答案:

答案 0 :(得分:2)

使用正则表达式来解析HTML通常是一个坏主意 - 有无数的极端情况,要抓住它们需要付出很多努力(如果你的输入是<!-- <script> --> foo <!-- </script> -->怎么办?) - 但要回答你的问题一个非常具体的问题:将+,一个尽可能消耗的“贪婪”量词,更改为+?,这是一个“不情愿”的量词,消耗尽可能少。

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

答案 1 :(得分:0)

我过去曾建议这样做:

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

根据您的语言或工具使用“单行”或“dotall”编译器开关。

有关详情,请参阅我的回答:https://stackoverflow.com/q/8043367/561690

在回应评论时,我做了一些改动,除了让它更难以成功获得某些东西之外什么都不做。对于<script之间的任何空格 - 在构建解析器时,我不会忽略推荐的那部分(标准?),以使其更灵活,所以我会把它作为我答案的一部分留下来!

答案 2 :(得分:0)

OWASP Java HTML Sanitizer是由OWASP赞助的HTML清理程序,用Java编写,它使用一串HTML和白名单标记和属性来生成一串安全的HTML。

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

完全披露:我是维护者。