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

您的位置:首頁技術文章
文章詳情頁

java過濾特殊字符操作(xss攻擊解決方案)

瀏覽:84日期:2022-08-09 16:19:07

XSS ,全名:cross-site scripting(跨站點腳本),是當前 web 應用中最危險和最普遍的漏洞之一。攻擊者嘗試注入惡意腳本代碼(常js腳本)到受信任的網站上執行惡意操作,用戶使用瀏覽器瀏覽含有惡意腳本頁面時,會執行該段惡意腳本,進而影響用戶(比如關不完的網站、盜取用戶的 cookie 信息從而偽裝成用戶去操作)等等。

它與 SQL 注入很類似,同樣是通過注入惡意指令來進行攻擊。但 SQL 注入是在服務器端上執行的,而 XSS 攻擊是在客戶端上執行的,這點是他們本質區別。

其實,個人感覺對于xss攻擊不必區分究竟是反射型XSS、存儲型XSS還是DOM Based XSS,只需要知道如何去防護。而防護的最有效的措施就是過濾,對前端頁面提交到后臺的內容進行過濾。具體如下:

1.解決方法一

攔截所有的請求參數,對請求參數中包含特殊字符’<‘或’>’進行過濾。

package com.haier.openplatform.srm.base.filter;import java.io.IOException;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;import org.springframework.web.filter.OncePerRequestFilter;public class StringFilter extends OncePerRequestFilter{@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)throws ServletException, IOException {chain.doFilter(new StringFilterRequest((HttpServletRequest)request), response);}}class StringFilterRequest extends HttpServletRequestWrapper {public StringFilterRequest(HttpServletRequest request) {super(request);}@Overridepublic String getParameter(String name) {// 返回值之前 先進行過濾return filterDangerString(super.getParameter(name));}@Overridepublic String[] getParameterValues(String name) {// 返回值之前 先進行過濾String[] values = super.getParameterValues(name);if(values==null){return null;}for (int i = 0; i < values.length; i++) {values[i] = filterDangerString(values[i]);}return values;}@Overridepublic Map getParameterMap() {Map keys = super.getParameterMap();Set set = keys.entrySet();Iterator iters = set.iterator();while (iters.hasNext()) {Object key = iters.next();Object value = keys.get(key);keys.put(key, filterDangerString((String[]) value));}return keys;}/*@Overridepublic Object getAttribute(String name) {// TODO Auto-generated method stubObject object = super.getAttribute(name);if (object instanceof String) {return filterDangerString((String) super.getAttribute(name));} elsereturn object;}*/public String filterDangerString(String value) {if (value == null) {return null;}//value = value.replaceAll('{', '{');value = value.replaceAll('<', '&lt;');value = value.replaceAll('>', '&gt;');//value = value.replaceAll('t', ' ');//value = value.replaceAll('rn', 'n');//value = value.replaceAll('n', '<br/>');//value = value.replaceAll('’', '&#39;');//value = value.replaceAll('', '&#92;');//value = value.replaceAll(''', '&quot;');//value = value.replaceAll('}', '?').trim();return value;}public String[] filterDangerString(String[] value) {if (value == null) {return null;}for (int i = 0; i < value.length; i++) {String val = filterDangerString(value[i]);value[i] = val;}return value;}}

web.xm中的過濾器配置:

<filter> <filter-name>StringFilter</filter-name> <filter-class>com.xxx.base.filter.StringFilter</filter-class> </filter> <filter-mapping> <filter-name>StringFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>2.解決方法二(轉,未驗證)2.1前端過濾

2.1.1 javascript 原生方法

//轉義 元素的innerHTML內容即為轉義后的字符 function htmlEncode ( str ) { var ele = document.createElement(’span’); ele.appendChild( document.createTextNode( str ) ); return ele.innerHTML; } //解析 function htmlDecode ( str ) { var ele = document.createElement(’span’); ele.innerHTML = str; return ele.textContent; }

2.1.2 JQuery 方法

function htmlEncodeJQ ( str ) { return $(’<span/>’).text( str ).html(); } function htmlDecodeJQ ( str ) { return $(’<span/>’).html( str ).text(); }

2.1.3 調用方法

var msg1= htmlEncodeJQ(’<script>alert(’test’);</script>’);var msg1= htmlEncode(’<script>alert(’test’);</script>’);//結果變成:&lt;script&gt;alert(’test’);&lt;/script&gt;2.2 后端過濾

2.2.1 java 一些框架自動工具類,

比如:org.springframework.web.util.HtmlUtils

public static void main(String[] args) { String content = '<script>alert(’test’);</script>'; System.out.println('content='+content); content = HtmlUtils.htmlEscape(content); System.out.println('content='+content); content = HtmlUtils.htmlUnescape(content); System.out.println('content='+content);}

但這樣有個問題,就是它全部的html標簽都不解析了。

可能這不是你想要的,你想要的是一部分解析,一部分不解析。好看下面。

2.2.2 自己用正則來完成你的需求

package top.lrshuai.blog.util;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * * @author lrshuai * @since 2017-10-13 * @version 0.0.1 */public class HTMLUtils {/** * 過濾所有HTML 標簽 * @param htmlStr * @return */public static String filterHTMLTag(String htmlStr) { //定義HTML標簽的正則表達式 String reg_html='<[^>]+>'; Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); htmlStr=matcher.replaceAll(''); //過濾html標簽 return htmlStr;}/** * 過濾標簽,通過標簽名 * @param htmlStr * @param tagName * @return */public static String filterTagByName(String htmlStr,String tagName) { String reg_html='<'+tagName+'[^>]*?>[sS]*?</'+tagName+'>'; Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); htmlStr=matcher.replaceAll(''); //過濾html標簽 return htmlStr;}/** * 過濾標簽上的 style 樣式 * @param htmlStr * @return */public static String filterHTMLTagInStyle(String htmlStr) { String reg_html='style=(’|')(.*?)(’|')'; Pattern pattern=Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); htmlStr=matcher.replaceAll(''); //過濾html標簽 return htmlStr;}/** * 替換表情 * @param htmlStr * @param tagName * @return */public static String replayFace(String htmlStr) { String reg_html='[em_d{1,}]'; Pattern pattern =Pattern.compile(reg_html,Pattern.CASE_INSENSITIVE); Matcher matcher=pattern.matcher(htmlStr); if(matcher.find()) {matcher.reset();while(matcher.find()) { String num = matcher.group(0); String number=num.substring(num.lastIndexOf(’_’)+1, num.length()-1); htmlStr = htmlStr.replace(num, '<img src=’/face/arclist/'+number+'.gif’ border=’0’ />');} } return htmlStr;} public static void main(String[] args) {String html = '<script>alert(’test’);</script><img src=’/face/arclist/5.gif’ border=’0’ /><div style=’position:fixs;s’></div><style>body{color:#fff;}</style><Style>body{color:#fff;}</Style><STYLE>body{color:#fff;}</STYLE>';System.out.println('html='+html);html = HTMLUtils.filterTagByName(html, 'style');System.out.println('html='+html);html = HTMLUtils.filterTagByName(html, 'script');System.out.println('html='+html);html = HTMLUtils.filterHTMLTagInStyle(html);System.out.println('html='+html); }}java 過濾特殊字符串升級版

ASCII碼中除了32之外還有160這個特殊的空格 db中的空格 不間斷空格->頁面上的&nbsp所產生的空格;

/** * 過濾特殊字符 * @param str * @return * * u00A0 特殊的空格 */ public static String stringFilter (String str){String regEx='[u00A0s'`~!@#$%^&*()+=|{}’:;’,[].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]';Pattern p = Pattern.compile(regEx);Matcher m = p.matcher(str);return m.replaceAll('').trim(); }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 钢格板_钢格栅_格栅板_钢格栅板 - 安平县鑫拓钢格栅板厂家 | 广域铭岛Geega(际嘉)工业互联网平台-以数字科技引领行业跃迁 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 薄壁轴承-等截面薄壁轴承生产厂家-洛阳薄壁精密轴承有限公司 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 商秀—企业短视频代运营_抖音企业号托管| 山楂片_雪花_迷你山楂片_山楂条饼厂家-青州市丰源食品厂 | 环氧树脂地坪_防静电地坪漆_环氧地坪漆涂料厂家-地壹涂料地坪漆 环球电气之家-中国专业电气电子产品行业服务网站! | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 次氯酸钠厂家,涉水级次氯酸钠,三氯化铁生产厂家-淄博吉灿化工 | 重庆LED显示屏_显示屏安装公司_重庆LED显示屏批发-彩光科技公司 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | China plate rolling machine manufacturer,cone rolling machine-Saint Fighter | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 韦伯电梯有限公司 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | 粘度计NDJ-5S,粘度计NDJ-8S,越平水分测定仪-上海右一仪器有限公司 | IPO咨询公司-IPO上市服务-细分市场研究-龙马咨询 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 24位ADC|8位MCU-芯易德科技有限公司 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 |