Beetl解決XSS問題(AntiSamy)

不少時候,咱們爲了安全,會對存儲的信息,進行轉義,過濾等處理,這樣帶來的壞處是,破壞原始的數據,並且轉義會佔用多餘的空間. 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"}




使用結果再也不彈出alert提示

能夠根據本身實際需求,自定義一些其餘方法. ide

相關文章
相關標籤/搜索