前言
有句话说基础不牢,地动山摇,不得不说,对于软件开发来说计算机基础知识的重要性是不言而喻的,今天来对XSS和CRSF来做一个知识的梳理,平时在实际项目中确实对于这方面的知识是没有意识的,当你懂的东西越多,了解的越多,才会心生敬畏之心,慢慢精益求精
XSS的概念
XSS(Cross Site Scripting):跨站脚本攻击,为了不和前端开发中层叠样式表(CSS)冲突,简称为XSS,XSS是指黑客通过技术手段向正常用户请求的html页面中插入恶意脚本,主要用于信息窃取、破坏等目的
分类
- 反射型XSS、存储型XSS和DOM型XSS
出现原因
XSS问题出在用户数据没有过滤、转义
从技术上来说,后端Java开发人员、前端开发人员都有可能造成XSS漏洞
如何防范XSS
主要是对用户输入数据做过滤或者转义
- 比如java开发人员可以使用jsoup框架对用户输入的字符串做XSS过滤
- 使用框架提供的工具类对用户输入的字符串做HTML转义(例如Spring提供的HtmlUtils)
- 前端在浏览器展示数据时也需要使用安全的API展示数据,比如使用innerText而不是innerHtml
HtmlUtils的Api地址:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/HtmlUtils.html
CSRF跨站请求伪造
CSRF跨站请求伪造是指在用户并不知情的情况下,冒充用户发起请求,在当前已经登录的web应用程序上执行恶意操作
出现原因
CSRF问题出现在HTTP接口没有防范不受信任的调用
防范CSRF
- CSRF Token验证,利用浏览器的同源限制,在HTTP接口执行前验证页面或者Cookie中设置的Token,只有验证通过才可以继续执行请求
- 人机交互,比如在调用网上银行转账接口时校验短信验证码
两者对比
从技术原理上来看:XSS是在正常用户请求的HTML页面中执行了黑客提供的恶意代码,CSRF是黑客直接盗用用户浏览器中的登录信息,冒充用户去执行黑客指定的操作