相信你们在各类技术文章都看到过SQL注入、XSS和CSRF这三个名词,可是我以为有一部分人可能并不清楚这三个词的真正含义。接下来,我就说下这三个名词的含义,但愿对你们能有所帮助。css
SQL注入前端
SQL注入是属于注入式攻击,这种攻击是由于在项目中没有将代码与数据(好比用户敏感数据)隔离,在读取数据的时候,错误的将数据做为代码的一部分执行而致使的。java
典型的例子就是当对SQL语句进行字符串拼接的时候,直接使用未转义的用户输入内容做为变量。这时,只要在sql语句的中间作修改,好比加上drop、delete等关键字,执行以后后果不堪设想。web
说到这里,那么该怎么处理这种状况呢?三个方面:sql
一、过滤用户输入参数中的特殊字符,下降风险。数据库
二、禁止经过字符串拼接sql语句,要严格使用参数绑定来传入参数。segmentfault
三、合理使用数据库框架提供的机制。就好比Mybatis提供的传入参数的方式 #{},禁止使用${},后者至关因而字符串拼接sql,要使用参数化的语句。浏览器
总结下,就是要正确使用参数化绑定sql变量。安全
XSS框架
XSS:跨站脚本攻击,Cross-Site Scripting,为了和前端的css避免重名,简称为XSS,是指经过技术手段,向正经常使用户请求的HTML页面中插入恶意脚本,执行。
这种攻击主要是用于信息窃取和破坏等目的。好比2011年的微博XSS攻击事件,攻击者利用了微博发布功能中未对action-data漏洞作有效的过滤,在发布微博信息的时候带上了包含攻击脚本的URL,用户访问就会加载恶意脚本,致使大量用户被攻击。
关于防范XSS上,主要就是经过对用户输入的数据作过滤或者是转义,可使用框架提供的工具类HtmlUtil。另外前端在浏览器展现数据的时候,要使用安全的API展现数据。好比使用innerText而不是innerHTML。
CSRF
跨站请求伪造,在用户并不知情的状况下,冒充用户发送请求,在当前已经登陆的web网站上执行恶意操做,好比恶意发帖,修改密码等。
大体来看,与XSS有重合的地方,前者是黑客盗用用户浏览器中的登陆信息,冒充用户去执行操做。后者是在正经常使用户请求的HTML中放入恶意代码,XSS问题出在用户数据没有转义,过滤;CSRF问题出如今HTTP接口没有防范不守信用的调用。
防范CSRF的漏洞方式:
一、CSRF Token验证,利用浏览器的同源限制,在HTTP接口执行前验证Cookie中的Token,验证经过才会继续执行请求。
二、人机交互,例如短信验证码、界面的滑块。
以前在会议上也有一个思考,在人机验证这块,若是不用验证码的方式,用界面上的滑块这种方式,并且滑块仍是第三方的。在APP的注册、登陆使用这种人机验证的方式的话,若是第三方出现了问题,那么本身的APP就彻底崩掉了,发版以后的APP什么也改不了。
这个问题,大家能想到解决方案吗?在下一篇文章中,我会说一下讨论的结果。
但愿这点分享会对每一个读者有所帮助,若是有什么好的建议,能够在留言区告诉我。
这样的分享我会一直持续,你的关注、点赞、转发和收藏是对我最大的支持,感谢。
若是这篇文章让你有所收获,欢迎关注公众号:java技术情报局