让你彻底了解SQL注入、XSS和CSRF

8次阅读

共计 1290 个字符,预计需要花费 4 分钟才能阅读完成。

相信大家在各种技术文章都看到过 SQL 注入、XSS 和 CSRF 这三个名词,但是我觉得有一部分人可能并不清楚这三个词的真正含义。接下来,我就说下这三个名词的含义,希望对大家能有所帮助。

SQL 注入
SQL 注入是属于注入式攻击,这种攻击是因为在项目中没有将代码与数据(比如用户敏感数据)隔离,在读取数据的时候,错误的将数据作为代码的一部分执行而导致的。
典型的例子就是当对 SQL 语句进行字符串拼接的时候,直接使用未转义的用户输入内容作为变量。这时,只要在 sql 语句的中间做修改,比如加上 drop、delete 等关键字,执行之后后果不堪设想。
说到这里,那么该怎么处理这种情况呢?三个方面:
1、过滤用户输入参数中的特殊字符,降低风险。
2、禁止通过字符串拼接 sql 语句,要严格使用参数绑定来传入参数。
3、合理使用数据库框架提供的机制。就比如 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 的漏洞方式:
1、CSRF Token 验证,利用浏览器的同源限制,在 HTTP 接口执行前验证 Cookie 中的 Token,验证通过才会继续执行请求。
2、人机交互,例如短信验证码、界面的滑块。
之前在会议上也有一个思考,在人机验证这块,如果不用验证码的方式,用界面上的滑块这种方式,而且滑块还是第三方的。在 APP 的注册、登录使用这种人机验证的方式的话,如果第三方出现了问题,那么自己的 APP 就完全崩掉了,发版之后的 APP 什么也改不了。
这个问题,你们能想到解决方案吗?在下一篇文章中,我会说一下讨论的结果。
希望这点分享会对每个读者有所帮助,如果有什么好的建议,可以在留言区告诉我。
这样的分享我会一直持续,你的关注、点赞、转发和收藏是对我最大的支持,感谢。如果这篇文章让你有所收获,欢迎关注公众号:java 技术情报局

正文完
 0