电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JSP使用過(guò)濾器防止Xss漏洞

瀏覽:276日期:2022-06-07 14:50:39

在用java進(jìn)行web業(yè)務(wù)開發(fā)的時(shí)候,對(duì)于頁(yè)面上接收到的參數(shù),除了極少數(shù)是步可預(yù)知的內(nèi)容外,大量的參數(shù)名和參數(shù)值都是不會(huì)出現(xiàn)觸發(fā)Xss漏洞的字符。而通常為了避免Xss漏洞,都是開發(fā)人員各自在頁(yè)面輸出和數(shù)據(jù)入庫(kù)等地方加上各種各樣的encode方法來(lái)避免Xss問(wèn)題。而由于開發(fā)人員的水平不一,加上在編寫代碼的過(guò)程中安全意識(shí)的差異,可能會(huì)粗心漏掉對(duì)用戶輸入內(nèi)容進(jìn)行encode處理。針對(duì)這種大量參數(shù)是不可能出現(xiàn)引起Xss和SQL注入漏洞的業(yè)務(wù)場(chǎng)景下,因此可以使用一個(gè)適用大多數(shù)業(yè)務(wù)場(chǎng)景的通用處理方法,犧牲少量用戶體驗(yàn),來(lái)避免Xss漏洞和SQL注入。

那就是利用Servlet的過(guò)濾器機(jī)制,編寫定制的XssFilter,將request請(qǐng)求代理,覆蓋getParameter和getHeader方法將參數(shù)名和參數(shù)值里的指定半角字符,強(qiáng)制替換成全角字符。使得在業(yè)務(wù)層的處理時(shí)不用擔(dān)心會(huì)有異常輸入內(nèi)容。

XssFilter.java

package filter;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
 
public class XssFilter implements Filter {
 
 public void init(FilterConfig config) throws ServletException {
 }
 
 public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain chain) throws IOException, ServletException 
 {
 XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper(
 (HttpServletRequest) request);
 chain.doFilter(xssRequest, response);
}
 
 public void destroy() {
 }
}

XssHttpServletRequestWrapper.java

package filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
 
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
 HttpServletRequest orgRequest = null;
 
 public XssHttpServletRequestWrapper(HttpServletRequest request) {
 super(request);
 orgRequest = request;
 }
 
 /**
 * 覆蓋getParameter方法,將參數(shù)名和參數(shù)值都做xss過(guò)濾。<br/>
 * 如果需要獲得原始的值,則通過(guò)super.getParameterValues(name)來(lái)獲取<br/>
 * getParameterNames,getParameterValues和getParameterMap也可能需要覆蓋
 */
 @Override
 public String getParameter(String name) {
 String value = super.getParameter(xssEncode(name));
 if (value != null) {
 value = xssEncode(value);
 }
 return value;
}
 
/**
 * 覆蓋getHeader方法,將參數(shù)名和參數(shù)值都做xss過(guò)濾。<br/>
 * 如果需要獲得原始的值,則通過(guò)super.getHeaders(name)來(lái)獲取<br/>
 * getHeaderNames 也可能需要覆蓋
*/
 @Override
 public String getHeader(String name) {
 
 String value = super.getHeader(xssEncode(name));
 if (value != null) {
 value = xssEncode(value);
 }
 return value;
}
 
/**
 * 將容易引起xss漏洞的半角字符直接替換成全角字符
 *
 * @param s
 * @return
*/
private static String xssEncode(String s) {
if (s == null || s.isEmpty()) {
return s;
}
 StringBuilder sb = new StringBuilder(s.length() + 16);
 for (int i = 0; i < s.length(); i++) {
 char c = s.charAt(i);
 switch (c) {
 case ">":
 sb.append(">");//全角大于號(hào)
 break;
 case "<":
 sb.append("<");//全角小于號(hào)
 break;
 case "\"":
 sb.append("‘");//全角單引號(hào)
 break;
 case "\"":
 sb.append("“");//全角雙引號(hào)
 break;
 case "&":
 sb.append("&");//全角
 break;
 case "\\":
 sb.append("\");//全角斜線
 break;
 case "#":
 sb.append("#");//全角井號(hào)
 break;
 default:
 sb.append(c);
 break;
 }
}
 return sb.toString();
}
 
/**
* 獲取最原始的request
*
* @return
*/
public HttpServletRequest getOrgRequest() {
return orgRequest;
}
/**
* 獲取最原始的request的靜態(tài)方法
*
* @return
*/
 public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
 if(req instanceof XssHttpServletRequestWrapper){
 return ((XssHttpServletRequestWrapper)req).getOrgRequest();
}
 
return req;
}
} 

在web.xml中添加

<filter>
<filter-name>xssFilter</filter-name>
 <filter-class>filter.XssFilter</filter-class>
 </filter>
 <filter-mapping>
 <filter-name>xssFilter</filter-name>
 <url-pattern>/*</url-pattern>
</filter-mapping>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

標(biāo)簽: JSP
相關(guān)文章:
主站蜘蛛池模板: 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 公交驾校-北京公交驾校欢迎您! 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 河南中专学校|职高|技校招生-河南中职中专网 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 谷梁科技| 贵州自考_贵州自学考试网| 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | VI设计-LOGO设计公司-品牌设计公司-包装设计公司-导视设计-杭州易象设计 | 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 有机废气处理-rto焚烧炉-催化燃烧设备-VOC冷凝回收装置-三梯环境 | SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 空气弹簧|橡胶气囊|橡胶空气弹簧-上海松夏减震器有限公司 | 中央空调维修、中央空调保养、螺杆压缩机维修-苏州东菱空调 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 智慧农业|农业物联网|现代农业物联网-托普云农物联网官方网站 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 免费B2B信息推广发布平台 - 推发网 |