首先,這只是一個POC,目前似乎工作正常,基本上我想知道您對這種解決方案的看法。Java El和持久性XSS
問題:
我有這個程序有很多的EL代碼,現在我應該防止XSS錯誤我目前的解決方案至今(不意味着它的唯一的事情我要去雖然修復)只涉及在EL環境中阻止XSS。下面
代碼是在JSP頁面中:
This is your car color ${car.color}
車對象設置如下:
ModelAndView mv = new ModelAndView("page3");
String xss = "<script>window.alert('XSS!!');</script>";
Car c = new Car(xss);
mv.addObject("car", c);
return mv;
這樣一條警告信息將會彈出,沒有什麼新在這裏...
我的建議(正在工作)如下
This is your car color${car.color.preventXSS}
這意味着,如「加入」一個preventXSS屬性的每一個字符串(我不修改String類),我通過定製的EL解析器這基本上是如下
try {
value = context.getELResolver().getValue(context, base, property);
} catch (PropertyNotFoundException e) {
if ((base instanceof String) && property.equals(PREVENT_XSS)) {
context.setPropertyResolved(true);
value = ESAPI.encoder().encodeForHTML(base.toString());
}
}
實現該「基準」在這種情況下具有值<script>window.alert('XSS!!');<;/script>
而'PREVENT_XSS'是'preventXSS'的常量,它是我們EL表達式中的最後一個屬性。
BTW我使用OWASP ESAPI編碼器處理XSS,如果需要,這可以通過添加其他不同的編碼方式,如encodeForHTMLAttribute和許多其他的是OWASP的ESAPI支持得到改善。
note1:我知道我可以使用一個EL函數來實現,但我只想添加'property'preventXSS,而不必在每個頁面中包含一個jsp taglib指令。
note2:我也知道c:out
jstl標籤。