防XSS防SQL注入式攻击的一些理解
问题产生
昨天正开开心心地码代码,被大佬同事拉去搞修复漏洞,说是我运维的项目出现严重的SQL注入攻击和跨站漏洞。
一开始我是一脸懵逼的,因为之前码代码根本没接触过漏洞这块,编程的时候也没有防止漏洞产生的思想。怀着忐忑的心情就过去了。
到了之后大佬同事给我一份文档,告诉我项目中有个链接被检测出有SQL注入风险的漏洞。
可能的原因
链接访问采用的是get方式,将其中一个参数写到了链接里面,可能在写防XSS的过滤条件时少了某些字符,所以才会检测出漏洞。因为一开始不知道什么是XSS,询问过大佬,get到了几个点:1.防止XSS攻击的方式是个过滤器 2.过滤条件少了字符导致漏洞。
解决过程
那么就去web.xml里面找找filter配置吧,这倒不难,找到之后再去找相关的类,看是不是少写过滤条件了。果然,在过滤条件中有很多,但是也有一些没有写上去,比如 “ , ” ,:等,按照检测的例子,将一些特殊的条件添加上去,大功告成。
总结
问题是解决了,但是我对这个漏洞的产生以及危害还是一知半解。SQL注入攻击是什么?工作机制是怎样的?危害有那些?不懂就要去问,然后就去和大佬交流。大佬拿我处理的漏洞举了个例子:
假如有个链接http:www.xxxxx.com?userID=xxxx,如果你不用XSS过滤器进行过滤的话,如果有人用userID=<a href = "www.aaaaaa.com"></a>(即一个网址超链接)请求之后,直接保存在数据库中,当查询的时候,返回的也是这个userID==<a href = "www.aaaaaa.com"></a>,那么前端就解析出一个超链接进行跳转新网站(钓鱼网站),用户不知道时就会发生用户信息泄露。如果写了对 < 的过滤条件,那么在写数据库的时候<a href = "www.aaaaaa.com"></a>包含<,根本不能写入数据库,也就避免了这种问题。
另,记一个小技巧,有些英文 " ,: 可转换成中文 “ ,:,存入数据库,之后就算存入数据库,返回的时候因为有中文字符,前端解析会把整个东西解析成字符串。