2011-11-23 113 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適合相同的利基。

完全披露:我是一名維護者。