簡體   English   中英

Java 5 HTML轉義To Prevent XSS

[英]Java 5 HTML escaping To Prevent XSS

我正在研究Java應用程序中的一些XSS預防。

我目前有自定義構建的例程,它將轉義存儲在數據庫中的任何HTML,以便在我的jsps中安全顯示。 但是,如果可能的話,我寧願使用內置/標准方法來執行此操作。

我目前沒有編碼發送到數據庫的數據,但也希望開始這樣做。

有沒有內置的方法可以幫助我實現這一目標?

您通常在顯示期間逃避XSS,而不是在商店期間。 在JSP中,您可以使用JSTL (只需在/WEB-INF/lib刪除jstl-1.2.jar<c:out>標記或fn:escapeXml函數。 例如

<input name="foo" value="<c:out value="${param.foo}" />">

要么

<input name="foo" value="${fn:escapeXml(param.foo)}">

而已。 如果您在處理輸入和/或存儲在DB中時也這樣做,那么它全部分布在業務代碼和/或數據庫中。 你不應該這樣做,它只是維護麻煩,當你在不同的地方做這件事時你會冒險雙重逃避或更多(例如&將成為&amp;amp;而不是&amp;以便最終用戶真正看到&amp;而不是&在視圖中的代碼和數據庫不適合XSS敏感。只有看法。您應該然后逃逸,只在那里

更新 :您發布了4個關於同一主題的主題:

我只提醒你:你不需要逃避它的servlet /過濾/ javacode /數據庫/不管。 你只是不必要地使事情過於復雜。 在顯示期間逃脫它。 就這樣。

不是內置的,但檢查owasp esapi過濾器 ,它應該做你正在尋找的和更多。 它是由Owasp(“開放式Web應用程序安全項目”)的聰明人和女孩編寫的一個很棒的開源安全庫。

我不得不說我非常不同意接受的答案顯然是為了防止XSS逃避輸出。

我認為更好的方法是對輸入進行消毒,這可以通過一個方面輕松實現,這樣您就不必將它全部放在一起。 消毒不同於逃避

你不能盲目逃避:

  • 您可能希望用戶輸入HTML的子集(也稱為鏈接和粗體標記)。
  • 轉義不會阻止XSS

我建議使用帶有Aspect或@ futtta推薦過濾器的OWASP Antisammy庫。

下面是我使用Spring MVC注釋來清理用戶輸入的一個方面(因為我們將它用於所有輸入)。

@SuppressWarnings("unused")
@Aspect
public class UserInputSanitizerAdivsor {

    @Around("execution(@RequestMapping * * (..))")
    public Object check(final ProceedingJoinPoint jp) throws Throwable {
        Object[] args = jp.getArgs();
        if (args != null) {
            for (int i = 0; i < args.length; i++) {
                Object o = args[i];
                if (o != null && o instanceof String) {
                    String s = (String) o;
                    args[i] = UserInputSanitizer.sanitize(s);
                }
            }
        }
        return jp.proceed(args);
    }
}

您仍然必須在非富文本字段的輸出上轉義,但您永遠不會(我相信永遠不會)在您的數據庫中包含惡意數據。

如果您不想對某些輸入進行消毒,則可以始終進行注釋,使該方面不會消毒。

如果您向Internet提供任何排序​​REST API,則您不希望數據庫中存在惡意數據的另一個原因。 您可以在輸出上做正確的事情,但您的mashup合作伙伴可能不會。

消毒輸入或阻止輸入是可以的(我的意思是大多數人都有文件上傳限制嗎?)。 Web應用程序中的大多數字段不需要輸入腳本標記,更重要的是,大多數用戶可能不需要或不想輸入腳本標記(顯然例外是堆棧溢出答案)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM