目录
XSS
XSS
:跨站脚本攻击,Cross-Site Scripting
,为了和前端的css
避免重名,简称为XSS
,是指通过技术手段,向正常用户请求的HTML
页面中插入恶意脚本,执行。
这种攻击主要是用于信息窃取和破坏等目的。比如2011年的微博XSS
攻击事件,攻击者利用了微博发布功能中未对action-data
漏洞做有效的过滤,在发布微博信息的时候带上了包含攻击脚本的URL
,用户访问就会加载恶意脚本,导致大量用户被攻击。
如何防范XSS:
- 主要就是通过对用户输入的数据做过滤或者是转义,可以使用框架提供的工具类
HtmlUtil
。 - 前端在浏览器展示数据的时候,要使用安全的API展示数据。比如使用
innerText
而不是innerHTML
。
CSRF
CSRF
跨站点请求伪造(Cross—Site Request Forgery
),跟XSS
攻击一样,存在巨大的危害性,你可以这样来理解:
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF攻击攻击原理及过程如下:
网站A为存在CSRF
漏洞的网站,网站B为攻击者构建的恶意网站,用户C为网站A的合法用户。
- 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
- 在用户信息通过验证后,网站A产生
Cookie
信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A; - 用户未退出网站A之前,在同一浏览器中,打开另一个页面访问网站B;
- 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
- 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带
Cookie
信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie
信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
如何防范CSRF:
1 Token
验证,利用浏览器的同源限制,在HTTP接口执行前验证Cookie
中的Token
,验证通过才会继续执行请求。
2、人机交互,例如短信验证码、界面的滑块。
推荐阅读:
Cookie,Session ,Application是什么?
实现登录状态保持的方法:cookie session token jwt
SQL注入
SQL注入是属于注入式攻击,这种攻击是因为在项目中没有将代码与数据(比如用户敏感数据)隔离,在读取数据的时候,错误的将数据作为代码的一部分执行而导致的。
典型的例子就是当对SQL
语句进行字符串拼接的时候,直接使用未转义的用户输入内容作为变量。这时,只要在sql
语句的中间做修改,比如加上drop
、delete
等关键字,执行之后后果不堪设想。
如何防范SQL注入:
1、过滤用户输入参数中的特殊字符,降低风险。
2、禁止通过字符串拼接sql
语句,要严格使用参数绑定来传入参数。
3、合理使用数据库框架提供的机制。就比如Mybatis
提供的传入参数的方式 #{}
,禁止使用${}
,后者相当于是字符串拼接sql
,要使用参数化的语句。
总结下,就是要正确使用参数化绑定sql
变量。