应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

SpringBoot防止SQL注入XSS攻击CSRFCROS

  一、SQL注入问题
  (1)什么是SQL注入
  SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
  简单来说,就是将大部分SQL语句当参数传入系统中,从而获取系统中的数据。下面简单举例说明
  系统中有这样一条信息SQL语句执行,分页查询所有用户,每页查询20条,并且根据指定字段进行排序,也就是说排序字段也是参数传递过来的selectfromuserinfoorderby{fieldName}desclimit{page},{limit};正常执行的SQLselectfromuserinfoorderbyiddesclimit0,20;假如说,懂行的人恶意将排序参数修改为以下格式selectfromuserinfoorderbyid;select1desclimit0,20;
  SQL注入问题分析:攻击者注入了类似这样的参数:1;缩表语句其中;前面的语句先执行了由于后面的语句会被注释掉,接下来只会执行锁表语句,把表锁住正常业务请求从数据库获得连接之后,尝试获取锁表,但是一直获取不到,直到超时数据库连接池不够用,没有空闲连接新的业务请求获取不到数据库连接,报错数据库连接过多异常
  这样很简单的一句话SQL,就可以把系统搞炸掉,这种方式可以实现删库跑路1;deletefromuser;
  以上语句会把整个test数据库所有内容都删掉(2)防止SQL注入使用预编译机制
  尽量用预编译机制,少用字符串拼接的方式传参,它是sql注入问题的根源。要对特殊字符进行转义
  有些特殊字符,比如:作为like语句中的参数时,要对其进行转义处理。要捕获异常
  需要对所有的异常情况进行捕获,切记接口直接返回异常信息,因为有些异常信息中包含了sql信息,包括:库名,表名,字段名等。攻击者拿着这些信息,就能通过sql注入随心所欲地攻击你的数据库了。目前比较主流的做法是,有个专门的网关服务,它统一暴露对外接口。用户请求接口时先经过它,再由它将请求转发给业务服务。这样做的好处是:能统一封装返回数据的返回体,并且如果出现异常,能返回统一的异常信息,隐藏敏感信息。此外还能做限流和权限控制。使用代码检测工具
  使用sqlMap等待代码检测工具,它能检测sql注入漏洞。要有监控
  需要对数据库sql的执行情况进行监控,有异常情况,及时邮件或短信提醒。数据库账号需控制权限
  对生产环境的数据库建立单独的账号,只分配DML相关权限,且不能访问系统表。切勿在程序中直接使用管理员账号。代码review
  建立代码review机制,能找出部分隐藏的问题,提升代码质量。使用其他手段处理
  对于不能使用预编译传参时,要么开启druid的filter防火墙,要么自己写代码逻辑过滤掉所有可能的注入关键字。二、XSS攻击问题(1)什么是XSS攻击
  XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
  通常情况下,被用来盗用Cookie、破坏页面结构、重定向到其他网站等(2)防止XSS攻击
  对用户输入的表单信息进行检测过滤三、CSRFCROS恶意访问(1)什么是CSRFCROS恶意访问
  CSRFCrossSiteRequestForgery跨站请求伪造:
  攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,CORSCrossOriginResourseSharing跨站资源共享,恶意访问内网敏感资源。(2)解决办法
  有效的解决办法是通过多种条件屏蔽掉非法的请求,例如HTTP头、参数等:不信任未经身份验证的跨域请求,应该首先验证SessionID或者Cookie对于请求方来说验证接收的数据有效性,服务方仅暴露最少最必须的功能通过多种条件屏蔽掉非法的请求,例如HTTP头、参数等服务端代码跨域设置,设置了nginx转发,也可设置在nginx中
  防止大规模的恶意请求,niginx反向代理可以配置请求频率,对ip做限制。nginx可以很方便地做访问控制,特别是一些偶发性的大量恶意请求,需要屏蔽处理。
  屏蔽ip地址locationsomeapi{allowip;特定接口只开放给某个ip调用denyall;}locationsomepage{denyip;屏蔽某个ip访问(iptables可以拒绝某个ip连接)allowall;}
  屏蔽useragentif(httpuseragentMozilla5。0){return403;}有些请求头很明显不是用户浏览器分析nginxahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a,找出恶意ip或useragentcatvarlognginxaccess。logawkF{A〔(NF1)〕}END{for(kinA)printA〔k〕,k}sortntail12258。144。7。66337106。91。201。752270122。200。77。170显然这个ip不正常,而且这不是nginx所知道的真实ip,而是httpxforwardedfor变量
  屏蔽代理ip
  有两种情形会需要屏蔽代理ip:一是代理ip访问,二是负载均衡(realip请求负载均衡服务器,再代理给后端server)vietcnginxbadproxy。rulesmaphttpxforwardedforbadproxy{default0;122。200。77。1701;建立映射}vietcnginxnginx。confhttp{includeetcnginxbadproxy。rules这个要在server配置之前server{locationsomepage{if(badproxy){return403;}}}}四、解决方案
  创建XssAndSqlHttpServletRequestWrapper包装器,这是实现XSS过滤的关键,在其内重写了getParameter,getParameterValues,getHeader等方法,对http请求内的参数进行了过滤importjava。io。BufferedReader;importjava。io。ByteArrayInputStream;importjava。io。IOException;importjava。io。InputStreamReader;importjava。util。Enumeration;importjava。util。HashMap;importjava。util。Map;importjava。util。Set;importjava。util。Vector;importjava。util。regex。Pattern;importjavax。servlet。ReadListener;importjavax。servlet。ServletInputStream;importjavax。servlet。http。HttpServletRequest;importjavax。servlet。http。HttpServletRequestWrapper;importorg。springframework。util。StreamUtils;importcom。sgcc。uap。utils。stream。StreamUtil;publicclassXssAndSqlHttpServletRequestWrapperextendsHttpServletRequestWrapper{HttpServletRequestorgRequestnull;privateMapString,String〔〕parameterMap;privatefinalbyte〔〕body;用于保存读取body中数据publicXssAndSqlHttpServletRequestWrapper(HttpServletRequestrequest)throwsIOException{super(request);orgRequestrequest;parameterMaprequest。getParameterMap();bodyStreamUtils。copyToByteArray(request。getInputStream());}重写几个HttpServletRequestWrapper中的方法获取所有参数名return返回所有参数名OverridepublicEnumerationgetParameterNames(){VectorvectornewVector(parameterMap。keySet());returnvector。elements();}覆盖getParameter方法,将参数名和参数值都做xsssql过滤。
  如果需要获得原始的值,则通过super。getParameterValues(name)来获取
  getParameterNames,getParameterValues和getParameterMap也可能需要覆盖OverridepublicStringgetParameter(Stringname){String〔〕resultsparameterMap。get(name);if(resultsnullresults。length0)returnnull;else{Stringvalueresults〔0〕;if(value!null){valuexssEncode(value);}returnvalue;}}获取指定参数名的所有值的数组,如:checkbox的所有数据接收数组变量,如checkobx类型OverridepublicString〔〕getParameterValues(Stringname){String〔〕resultsparameterMap。get(name);if(resultsnullresults。length0)returnnull;else{intlengthresults。length;for(inti0;ilength;i){results〔i〕xssEncode(results〔i〕);}returnresults;}}覆盖getHeader方法,将参数名和参数值都做xsssql过滤。
  如果需要获得原始的值,则通过super。getHeaders(name)来获取
  getHeaderNames也可能需要覆盖OverridepublicStringgetHeader(Stringname){Stringvaluesuper。getHeader(xssEncode(name));if(value!null){valuexssEncode(value);}returnvalue;}将容易引起xsssql漏洞的半角字符直接替换成全角字符paramsreturnprivatestaticStringxssEncode(Strings){if(snulls。isEmpty()){returns;}else{sstripXSSAndSql(s);}StringBuildersbnewStringBuilder(s。length()16);for(inti0;is。length();i){charcs。charAt(i);switch(c){case:sb。append();转义大于号break;case:sb。append();转义小于号break;case:sb。append();转义单引号break;case:sb。append();转义双引号break;case:sb。append();转义break;case:sb。append();转义break;default:sb。append(c);break;}}returnsb。toString();}获取最原始的requestreturnpublicHttpServletRequestgetOrgRequest(){returnorgRequest;}获取最原始的request的静态方法returnpublicstaticHttpServletRequestgetOrgRequest(HttpServletRequestreq){if(reqinstanceofXssAndSqlHttpServletRequestWrapper){return((XssAndSqlHttpServletRequestWrapper)req)。getOrgRequest();}returnreq;}防止xss跨脚本攻击(替换,根据实际情况调整)publicstaticStringstripXSSAndSql(Stringvalue){if(value!null){NOTE:ItshighlyrecommendedtousetheESAPIlibraryanduncommentthefollowinglinetoavoidencodedattacks。valueESAPI。encoder()。canonicalize(value);Avoidnullcharactersvaluevalue。replaceAll(,);AvoidanythingbetweenscripttagsPatternscriptPatternPattern。compile(〔r〕script〔r〕(。?)〔r,Pattern。CASEINSENSITIVE);valuescriptPattern。matcher(value)。replaceAll();Avoidanythinginasrca2020imgdataimg。jpgdatasrchttp:www。yihaomen。comarticlejava。。。typeofexpressionscriptPatternPattern。compile(src〔r〕〔r〕〔〕(。?)〔〕,Pattern。CASEINSENSITIVEPattern。MULTILINEPattern。DOTALL);valuescriptPattern。matcher(value)。replaceAll();RemoveanylonesomescripttagscriptPatternPattern。compile(〔r,Pattern。CASEINSENSITIVE);valuescriptPattern。matcher(value)。replaceAll();RemoveanylonesometagscriptPatternPattern。compile(〔r,Pattern。CASEINSENSITIVE);flagscriptPattern。matcher(value)。find();if(flag){returnflag;}Removeanylonesome

怎样治疗神经衰弱?怎样治疗神经衰弱?神经衰弱的治疗和预防是结合在一起的,必须把消除病因和消除症状结合起来。神经衰弱既然主要是精神因素引起的,因此消除病因也必须精神治疗为主,引导病人用辩证唯……抄书21天为什么说人一生追求快乐是错的?如果问你,人什么最重要?有人恐怕会说,快乐最重要。是啊,讲快乐,不生气的书籍视频铺天盖地。可是总是看的时候,觉得有点道理,可是一转身还是总生气,不快乐。古往今来,保持快乐就像是……华为手机设置北斗方法跟着官方教程来设置华为手机北斗卫星通讯2022年9月,华为发布了新一代旗舰手机Mate50系列,最大的亮点在于支持北斗卫星通讯服务。日前,华为在其官方账号发布了华为手机设置北斗方法的教程视频,那么我们就跟着官方教程……体坛联播中国女篮主帅欣喜球队进步,西班牙绝杀葡萄牙晋级在世界杯上率队击败比利时、以4胜1负结束小组赛赛程后,中国女篮主教练郑薇表示,这场球对全队来说是一个提升,锻炼价值也更大一些。在国际足坛,28日凌晨进行的欧国联比赛中,上……奇瑞新能源价格再次上调29005000元电车汇消息:4月6日,奇瑞新能源表示,受电池、芯片等原材料价格持续大幅上涨因素影响,奇瑞新能源部分在售车型的成本持续增高,部分车型价格上调29005000元。4月6日20:00……崇左拥有28个民族,民族文化丰富多彩广西是一个风景秀丽民族风情浓郁的地方,这里的四季如春物产非常丰富,同时也是西南地区最便捷的出海通道,为中国的经济贸易提供了非常便利的条件。广西下辖14个地级市,8个县级市是我国……坚持每天运动,为什么胆固醇仍居高不下?可能是忽略了这两方面高血脂是三高症之一,是一种常见的慢性疾病,常规体检的时候,可能会发现自己胆固醇高、甘油三酯也高,鉴于这种情况,最好的办法就是控制饮食运动,来降低血脂,当然如果血脂数值过高时,医……天冷最爱吃什么菜?冬天南瓜靠边站,当然是这道下饭菜,咸香可口秋冬季节什么菜最受欢迎呢?当然是热乎乎的菜最受欢迎啦!推荐大家这道白菜猪肉炖粉条,有荤有素,吃起来咸香可口,是一道非常美味的家常菜,不光是做法简单,调味料也是非常的简单,……张馨予何捷曝新结婚照!头靠肩上很甜蜜,结婚4年育有一女近日,据娱乐媒体曝出了张馨予和丈夫何捷的结婚照!是此前从未流传出的新照片,也算是花絮照,与他们两人的婚纱照成片不一样,引来不少网友围观热议。据了解,当时两人在某西装定制的……芯片短缺动力电池原材料价格上涨,新能源汽车行业如何破局?电动化、智能化正成为汽车产业发展的新动能。我国新能源汽车正在从市场培育期迈进市场化的发展阶段,正在从政策和市场双驱动转向以市场驱动为主的新发展阶段。中国电动汽车百人会理事……跨省游迎来松绑新政旅游业复苏之春还有多远?羊城晚报全媒体记者刘星彤伴随卡塔尔世界杯的火热开锣,在这个寒意乍起的时节,国内旅游业迎来了春天般的转机。11月15日,文化和旅游部发布《关于进一步优化新冠肺炎疫情防……嗅觉最灵敏的永劫队伍?YZG先后劝架GG狼队GD,击败分手到近日,《永劫无间》NBPL联赛的总决赛迎来了最后一天的比赛,在最后一天里,GG、OUG、FPX。ZQ、YZG、Wolves等暂时位列前五的争冠队伍,将对永劫联赛总冠军发起最后冲……
原子弹与月球物理学在20世纪初期或许是最具权威的学科。它不停地揭示和审视长期潜藏的物质世界,获得了一种独特的魅力。然而,物理学所赢得的一部分声誉是源于后知之明。如果原子弹不曾被创制出……交4万2坐月子阳了丈夫拿出了喇叭夏先生反映,去年11月底,他妻子到宁波东易大名医院坐月子,感染了新冠病毒,在医院里却没有人理。花4万2坐月子没人管丈夫气到拿起喇叭产后合同显示,去年5月,夏先生交了……微信安全中心最新提醒有这类行为,封号!近日,微信安全中心发布最新公告:严厉打击网络诈骗行为,对确认存在欺诈行为的账号、支付账户进行封禁、冻结等处理。网络诈骗是指犯罪分子编造虚假信息,设置骗局,通过互联网对受害……点燃科技强国梦北理工华附共建校本选修课新学期开课南都讯记者孙小鹏通讯员哈楠日前,著名人工智能领域科学家、北京理工大学博士生导师罗庆生教授走进华南师范大学附属中学,以《特种机器人与未来战争》为主题为学生们讲授知识。据悉,该讲座……深圳马拉松新线路颜值爆表串联起市民中心南头古城前海石公园等地读特客户端深圳新闻网2023年2月15日讯(深圳晚报记者林炜航)新时代,新深马,新路线。即将开跑的2022深圳马拉松将迎来新变化,跑友对跨越了福田、南山、宝安、前海4个区域,途……素颜干净白皙,没有细纹的,关键在于2习惯,若坚持,一样能成功相信每一位女性都希望自己能够像神话故事里的仙女一样,永远年轻漂亮,当然在生活中也有不少的人都已经做到了,保持着年轻细腻的肌肤状态,如果不说自己的年龄,恐怕会有很多人不知道自己的……10月国内手机出货量公布,网友降了还是升了?出货量是检验一个行业活力的试金石,从中国信通院发布的10月份国内手机出货量数据显示,国内出货量增长高达28。4。5G手机一共出货659。0万部,同比增长58。7,占同期手机出货……入了心的人,怎么能容易忘记?这一段时光,人们看到的只有离别,但却始终不能忘怀那些曾与自己共度的美好时光。也许它们只是一个瞬间,却久久地徘徊在心里,牵扯着诸多欢喜与忧愁,一种难以言喻的记忆,一种无法抹去的伤……韩复榘被蒋介石枪决后,留下3位夫人5个子女,后来他们过得怎样1936年12月12日,张学良和杨虎城干了一件大事,我他们把国民党的最高领袖人物蒋介石给扣了,随后便促使了国共合作。按理说,这件事中,只有张学良和杨虎城比较瞩目,应该也影……你不知道的护肤小常识,测测你是不是熬夜脸你是否经常熬夜工作到凌晨?你的皮肤是否出现了各种各样的问题?对于以上问题如果你的回答是肯定的,那请你接着看下去。女性熬夜对皮肤的危害到底有多大?粉刺、闭口、痘……10岁男孩花费万元买奥特曼卡,孩子集卡成瘾怎么破?最近,闺蜜跟我抱怨,儿子才3岁都已经开始痴迷奥特曼卡片了。每次去超市,都吵着闹着要买,刚开始是买一包,慢慢地演变成一次要买三四包。对此,她感到很头疼。本来她就……1974年开国元帅彭德怀逝世,临终前对侄女说出心愿,却没能完1978年12月24日,邓小平代表党中央在彭德怀元帅的追悼大会上致悼词:他不怕困难,勇挑重担,对革命工作更是勤勤恳恳,十分负责!开国元勋彭德怀一生都将群众疾苦冷暖放在心上……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网