不少時候,咱們爲了安全,會對存儲的信息,進行轉義,過濾等處理,這樣帶來的壞處是,破壞原始的數據,並且轉義會佔用多餘的空間. html
本人使用JFinal框架,開始考慮過全局設置過濾器,有的不須要的也會轉義,不是很友好~ java
後來發現這邊文章http://www.iteye.com/topic/1123423 ,經過Beetl來處理XSS這一類的問題 git
首先,自定義一個格式化類XSSDefenseFormat.java apache
import org.apache.commons.lang.StringEscapeUtils; import org.beetl.core.Format; import org.owasp.validator.html.*; /** * Created by yinjun622 on 14-8-11. */ public class XSSDefenseFormat implements Format { @Override public Object format(Object data, String pattern) { if (null == data) { return null; } else { try { Policy policy = Policy.getInstance(PathKit.getRootClassPath()+"/antisamy.xml"); //antisamy.xml採用官方給出的ebay的模板 AntiSamy as = new AntiSamy(policy); String content = (String) data; if ("escape".equals(pattern)) { content = StringEscapeUtils.escapeHtml(content); } // clean content CleanResults cr = as.scan(content); content = cr.getCleanHTML(); return content; } catch (ScanException e) { return "系統錯誤"; } catch (PolicyException e) { return "系統錯誤"; } } } }
antisamy.xml文件地址: 安全
http://git.oschina.net/yinjun622/JFinal-Shiro-JDBC-Demo/blob/master/antisamy.xml 框架
groupTemplate.registerFormat("xss", new XSSDefenseFormat());
最後針對須要的地方,進行xss處理,默認是不對html進行轉義輸出的,由於在使用副編輯器後,會帶用html,轉義的話頁面顯示須要處理,因此默認不轉義. xss
${a.name, xss}
若是輸出的html須要轉義那麼使用: 編輯器
${a.name, xss="escape"}
能夠根據本身實際需求,自定義一些其餘方法. ide