游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

SpringCloud(五十一)Gateway拦截器实现防止

  SQL注入是常见的系统安全问题之一,用户通过特定方式向系统发送SQL脚本,可直接自定义操作系统数据库,如果系统没有对SQL注入进行拦截,那么用户甚至可以直接对数据库进行增删改查等操作。
  XSS全称为CrossSiteScript跨站点脚本攻击,和SQL注入类似,都是通过特定方式向系统发送攻击脚本,对系统进行控制和侵害。SQL注入主要以攻击数据库来达到攻击系统的目的,而XSS则是以恶意执行前端脚本来攻击系统。
  项目框架中使用mybatismybatisplus数据持久层框架,在使用过程中,已有规避SQL注入的规则和使用方法。但是在实际开发过程中,由于各种原因,开发人员对持久层框架的掌握水平不同,有些特殊业务情况必须从前台传入SQL脚本。这时就需要对系统进行加固,防止特殊情况下引起的系统风险。
  在微服务架构下,我们考虑如何实现SQL注入XSS攻击拦截时,肯定不会在每个微服务都实现一遍SQL注入XSS攻击拦截。根据我们微服务系统的设计,所有的请求都会经过Gateway网关,所以在实现时就可以参照前面的日志拦截器来实现。在接收到一个请求时,通过拦截器解析请求参数,判断是否有SQL注入XSS攻击参数,如果有,那么返回异常即可。
  我们前面在对微服务Gateway进行自定义扩展时,增加了Gateway插件功能。我们会根据系统需求开发各种Gateway功能扩展插件,并且可以根据系统配置文件来启用禁用这些插件。下面我们就将防止SQL注入XSS攻击拦截器作为一个Gateway插件来开发和配置。1、新增SqlInjectionFilter过滤器和XssInjectionFilter过滤器,分别用于解析请求参数并对参数进行判断是否存在SQL注入XSS攻脚本。此处有公共判断方法,通过配置文件来读取请求的过滤配置,因为不是多有的请求都会引发SQL注入和XSS攻击,如果无差别的全部拦截和请求,那么势必影响到系统的性能。判断SQL注入的拦截器防sql注入authorGitEggLog4j2AllArgsConstructorpublicclassSqlInjectionFilterimplementsGlobalFilter,Ordered{。。。。。。当返回参数为true时,解析请求参数和返回参数if(shouldSqlInjection(exchange)){MultiValueMapString,StringqueryParamsrequest。getQueryParams();booleanchkRetGetParamsSqlInjectionRuleUtils。mapRequestSqlKeyWordsCheck(queryParams);booleanchkRetJsonfalse;booleanchkRetFormDatafalse;HttpHeadersheadersrequest。getHeaders();MediaTypecontentTypeheaders。getContentType();longlengthheaders。getContentLength();if(length0null!contentType(contentType。includes(MediaType。APPLICATIONJSON)contentType。includes(MediaType。APPLICATIONJSONUTF8))){chkRetJsonSqlInjectionRuleUtils。jsonRequestSqlKeyWordsCheck(gatewayContext。getRequestBody());}if(length0null!contentTypecontentType。includes(MediaType。APPLICATIONFORMURLENCODED)){log。debug(〔RequestLogFilter〕(Request)FormData:{},gatewayContext。getFormData());chkRetFormDataSqlInjectionRuleUtils。mapRequestSqlKeyWordsCheck(gatewayContext。getFormData());}if(chkRetGetParamschkRetJsonchkRetFormData){returnWebfluxResponseUtils。responseWrite(exchange,参数中不允许存在sql关键字);}returnchain。filter(exchange);}else{returnchain。filter(exchange);}}。。。。。。}判断XSS攻击的拦截器防xss注入authorGitEggLog4j2AllArgsConstructorpublicclassXssInjectionFilterimplementsGlobalFilter,Ordered{。。。。。。当返回参数为true时,记录请求参数和返回参数if(shouldXssInjection(exchange)){MultiValueMapString,StringqueryParamsrequest。getQueryParams();booleanchkRetGetParamsXssInjectionRuleUtils。mapRequestSqlKeyWordsCheck(queryParams);booleanchkRetJsonfalse;booleanchkRetFormDatafalse;HttpHeadersheadersrequest。getHeaders();MediaTypecontentTypeheaders。getContentType();longlengthheaders。getContentLength();if(length0null!contentType(contentType。includes(MediaType。APPLICATIONJSON)contentType。includes(MediaType。APPLICATIONJSONUTF8))){chkRetJsonXssInjectionRuleUtils。jsonRequestSqlKeyWordsCheck(gatewayContext。getRequestBody());}if(length0null!contentTypecontentType。includes(MediaType。APPLICATIONFORMURLENCODED)){log。debug(〔RequestLogFilter〕(Request)FormData:{},gatewayContext。getFormData());chkRetFormDataXssInjectionRuleUtils。mapRequestSqlKeyWordsCheck(gatewayContext。getFormData());}if(chkRetGetParamschkRetJsonchkRetFormData){returnWebfluxResponseUtils。responseWrite(exchange,参数中不允许存在XSS注入关键字);}returnchain。filter(exchange);}else{returnchain。filter(exchange);}}。。。。。。}2、新增SqlInjectionRuleUtils工具类和XssInjectionRuleUtils工具类,通过正则表达式,用于判断参数是否属于SQL注入XSS攻击脚本。通过正则表达式对参数进行是否有SQL注入风险的判断防sql注入工具类authorGitEggSlf4jpublicclassSqlInjectionRuleUtils{SQL的正则表达式privatestaticStringbadStrRegb(andor)b。{1,6}?(binbblikeb)。?lt;sscriptbbEXECbUNION。?SELECTUPDATE。?SETINSERTsINTO。?VALUES(SELECTDELETE)。?FROM(CREATEALTERDROPTRUNCATE)s(TABLEDATABASE);SQL的正则表达式privatestaticPatternsqlPatternPattern。compile(badStrReg,Pattern。CASEINSENSITIVE);sql注入校验mapparammapreturnpublicstaticbooleanmapRequestSqlKeyWordsCheck(MultiValueMapString,Stringmap){对post请求参数值进行sql注入检验returnmap。entrySet()。stream()。parallel()。anyMatch(entry{这里需要将参数转换为小写来处理StringlowerValueOptional。ofNullable(entry。getValue())。map(Object::toString)。map(String::toLowerCase)。orElse();if(sqlPattern。matcher(lowerValue)。find()){log。error(参数〔{}〕中包含不允许sql的关键词,lowerValue);returntrue;}returnfalse;});}sql注入校验jsonparamvaluereturnpublicstaticbooleanjsonRequestSqlKeyWordsCheck(Stringvalue){if(JSONUtil。isJsonObj(value)){JSONObjectjsonJSONUtil。parseObj(value);MapString,Objectmapjson;对post请求参数值进行sql注入检验returnmap。entrySet()。stream()。parallel()。anyMatch(entry{这里需要将参数转换为小写来处理StringlowerValueOptional。ofNullable(entry。getValue())。map(Object::toString)。map(String::toLowerCase)。orElse();if(sqlPattern。matcher(lowerValue)。find()){log。error(参数〔{}〕中包含不允许sql的关键词,lowerValue);returntrue;}returnfalse;});}else{JSONArrayjsonJSONUtil。parseArray(value);ListObjectlistjson;对post请求参数值进行sql注入检验returnlist。stream()。parallel()。anyMatch(obj{这里需要将参数转换为小写来处理StringlowerValueOptional。ofNullable(obj)。map(Object::toString)。map(String::toLowerCase)。orElse();if(sqlPattern。matcher(lowerValue)。find()){log。error(参数〔{}〕中包含不允许sql的关键词,lowerValue);returntrue;}returnfalse;});}}}通过正则表达式对参数进行是否有XSS攻击风险的判断XSS注入过滤工具类authorGitEggpublicclassXssInjectionRuleUtils{privatestaticfinalPattern〔〕PATTERNS{Avoidanythingina,Pattern。CASEINSENSITIVE),Avoidanythinginasrca2020imgdataimg。jpgdatasrc。。。typeofexpressionPattern。compile(src〔r〕〔r〕(。?),Pattern。CASEINSENSITIVEPattern。MULTILINEPattern。DOTALL),Pattern。compile(src〔r〕〔r〕(。?),Pattern。CASEINSENSITIVEPattern。MULTILINEPattern。DOTALL),RemoveanylonesomescripttagPattern。compile(script,Pattern。CASEINSENSITIVE),Avoidanythingina,Pattern。CASEINSENSITIVE),Removeanylonesome

2028全球及中国过瘤胃保护烟酸行业研究及十四五规划分析报告辰宇信息咨询市场调研公司最近发布《20232029全球与中国过瘤胃保护烟酸市场调研报告》内容摘要本文同时着重分析过瘤胃保护烟酸行业竞争格局,包括全球市场主要厂商竞争……新神雕侠侣被压4年,至今未能播出,看完选角后,我夸不出口无意中,在网上看到了一张定妆照,对此产生了好奇。男主背着一把剑,右手手臂残缺,而女主一袭白衣若雪。对于这样的设定,或许也只有金庸的《神雕侠侣》才能见到。难道《……java中的enum第一期enum存在的意义大家好,我是贠学文,点击右上方关注,每天为您分享java程序员需要掌握的知识点干货。凌晨四点的北京记得有人曾经和我说过,他在使用java的过程中,从来没有使用过en……2022年最后一个假期倒计时三天!到底哪里可以安心出游?还有3天就是国庆节啦!据此前国务院办公厅发布的放假安排10月1日至7日放假调休,共7天不过比较让人痛苦的是10月8日(星期六)、10月9日(星期日)上班也就是说国庆节之后……健康养生春季记得常晒这两处哈喽大家好,今天小编又来给大家分享干货了。一年之季在于春,春季的天气由寒转暖。每天接收大量太阳光,身体阳气充足,而且在出汗过程中把身体的湿气都排掉了,眼看着天气越来越暖和,记得……激情冰雪乐游密云线路五望京楼上的雪,染白了京畿大地(两日游)线路行程:第一天:司马台长城金山岭国际滑雪旅游度假区;第二天:承德避暑山庄返程。线路亮点:司马台长城处处遗留着历史的印记,远眺长城内外,连绵不断,绝美风光令人……肖战那些惊人到让人感到魔幻的数据!粉丝的回复,太凡尔赛了文:淡淡闲聊楔子众所周知,当今娱乐圈中,肖战是人气热度最高的明星,商业价值一骑绝尘,影视作品成绩优异,饰演的角色出彩出圈,拥有着最活跃,最具实力的粉丝群体。于是也成……36氪首发丨傲雪睿视完成数千万元PreA轮融资,致力于打造适36氪获悉,中国VR及MR头显厂商傲雪睿视已于近日完成了数千万元PreA轮融资(投资方暂不透露),本轮融资将主要于新品研发、市场拓展、人员扩充等方面。图片由企业官方提供……知乎者也陈巧珠春节登山沐豪情摄影:宋经新衣新鞋登新境,揽山揽云揽智慧。新春伊始,彻头彻尾的新啊!旧年里的一切都化作新运开篇的酵母,发酵出一路芬芳,带上节庆的欢愉,登上城南之山,接五行之火,过上红红火……windows安装sftp服务一、下载安装1。下载freeSSHD。exe下载地址freeSSHd1。3。1Download运行安装过程中会提示提示私有密钥没安装,点击确认是否运行,……来龟峰,体验桃源绮梦!那里,有悠闲自在的田园农家生活诗人陶渊明用《桃花源记》为世人造了一个长达千年的桃源绮梦,千百年来无数人都心向那个有良田美池桑竹之属的地方。如果真有这么一个地方你来吗?01第一天:远离尘嚣……读余秋雨泥步修行实记1。修行的关键,不在吸取,而在于排除;不在于追随,而在于看破。2。世间一切让给我们害怕的事情,其实并不可怕。害怕,只是制造大惑的人在我们身上留下的心惑。只要心惑一破,种种……
假如电动车续航超过3000公里,会全面取代燃油车吗?很多人一直争论新能源汽车的续航问题,但是新能源取代燃油车这个事情,是战略布局,是国家意志,根本不以个人意志为转移。网上对新能源的争议,其实不是什么技术之争,更多的是一种成……如何看待华为造车,能不能再创当年造手机的奇迹?华为认准的事,没有错。2021年的年未的时候,12月23日,华为的冬季发布会上,余承东以全新的身份亮相,一方面是华为消费者终端业务CEO,第二个身份就是华为智能汽车解决方……为什么现在不提倡过洋节了?从来就没有提倡过过洋节。只是一些不良商家或者别有用心的人的炒作。中国人过洋节,就是忘记历史,忘记曾经的痛和耻辱。过洋节,就是西方敌对势力对中国文化的侵蚀和对中国人的精神腐……五十岁以后一定要选丰田车吗?从来就不存在什么车、最适合什么人的说法,年轻人也好、中老年人也罢,选择什么车还是要看喜好,丰田所代表的日系车对于中老年人来说是一个不错的选择,但并非五十岁以上的朋友、就一定要选……哈弗自家的双离合变速箱怎么样(7dct)?用过的车主,都说说现在再使用大狗,已经开了一万多公里了,这套双离合的优点就是很平顺,低速轻踩也不会有顿挫,缺点就是用标准模式深踩油门延迟一秒多到两秒左右,佛系的开,开起来就很舒服,双……我收到两份offer,一份深圳比亚迪半导体器件工程师,一份是作为比亚迪一名6年的老员工,分析如下:如果您有背景,哪个公司靠山大,就去哪里!升职加薪,娶媳妇,买房子,都不成问题,必须走向人生巅峰。假如只有背影来我迪,想靠努力上……赶集网瓜子二手车毛豆新车网,开挂的互联网大赢家为何总是他提示:一红策划,免费策划,说到做到。他是赶集网的创始人,如今转做二手车,四年融资39亿日收入1900万当人人车逐渐退出市场的时候,其他的同行却在这时候展现了与众不同的强大……在瓜子网上,买二手车可靠吗?不管是二手车平台还是4S店的认证车辆,二手车市场的精品车,都只是一种卖车渠道,重要的是实地查看车况,最有效的规避风险的方法就是在车子正式成交之前,找个第三方检测机构好好检测一下……2019款道奇挑战者,美式肌肉车最后的信仰!美系肌肉车Musclecar,相信大家已经比较熟悉,肌肉车一般指上个世纪九十年代,诞生于美国本土的那种,车身尺寸巨大,通常长度都在5000mm以上,搭载有V8自然吸气引擎,拥有……人生的第一台车领克01,分享3800公里用车感受!爽啊!我是18年底准备买车的,然后就一直在看,也是无意看到了这款车,第一眼觉得不管是外观还是内饰上比较符合我的审美,是我想要的那种感觉,但是价格确实超过了我的预算,也是纠结了半天,后……这台丰田车100多万,因为它是顶配的陆地巡洋舰,5700确实车到山前必有路,有路必有丰田车,这句话很多人都听过,可见丰田在汽车业界的地位。在很长一段时间内,丰田都是世界第一大车厂,德系大众依靠近些年在中国市场的迅猛发展,在销量上总算能跟……玻璃水被冻了怎么办?有什么需要注意的?如果出现玻璃水被冻住的情况,就不要强行使用玻璃水,容易损坏电子原件。那么玻璃水被冻住,应该怎么样让其融化掉呢?如果开车,那么玻璃水会自动融化,因为发动机舱的温度是比较高的……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网