什么是 XSS?如何预防?
XSS 全称是 Cross Site Scripting ,为了与CSS区分开来,故简称 XSS,翻译过来就是“跨站脚本”。
XSS是指黑客往 HTML 文件中或者 DOM 中注入恶意脚本,从而在用户浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段。
最开始的时候,这种攻击是通过跨域来实现的,所以叫“跨域脚本”。发展到现在,往HTML文件中中插入恶意代码方式越来越多,所以是否跨域注入脚本已经不是唯一的注入手段了,但是 XSS 这个名字却一直保留至今。
注入恶意脚本可以完成这些事情:
窃取Cookie
监听用户行为,比如输入账号密码后之间发给黑客服务器
在网页中生成浮窗广告
修改DOM伪造登入表单
一般的情况下,XSS攻击有三种实现方式
存储型 XSS 攻击
反射型 XSS 攻击
基于 DOM 的 XSS 攻击
- 存储型 XSS 攻击
存储型 XSS 攻击大致步骤如下:
首先黑客利用站点漏洞将一段恶意 JavaScript 代码提交到网站的数据库中;
然后用户向网站请求包含了恶意 JavaScript 脚本的页面;
当用户浏览该页面的时候,恶意脚本就会将用户的 Cookie 信息等数据上传到服务器。
比如常见的场景:
在评论区提交一份脚本代码,假设前后端没有做好转义工作,那内容上传到服务器,在页面渲染的时候就会直接执行,相当于执行一段未知的JS代码。这就是存储型 XSS 攻击。
- 反射型 XSS 攻击
反射型 XSS 攻击指的就是恶意脚本作为「网络请求的一部分」,随后网站又把恶意的JavaScript脚本返回给用户,当恶意 JavaScript 脚本在用户页面中被执行时,黑客就可以利用该脚本做一些恶意操作。
举个例子:
http://TianTianUp.com?query=<script>alert("你受到了XSS攻击")</script>
服务器拿到后解析参数query,最后将内容返回给浏览器,浏览器将这些内容作为HTML的一部分解析,发现是Javascript脚本,直接执行,这样子被XSS攻击了。
这也就是反射型名字的由来,将恶意脚本作为参数,通过网络请求,最后经过服务器,在反射到HTML文档中,执行解析。
主要注意的就是,「服务器不会存储这些恶意的脚本,这也算是和存储型XSS攻击的区别吧」。
- 基于 DOM 的 XSS 攻击
基于 DOM 的 XSS 攻击是不牵涉到页面 Web 服务器的。具体来讲,黑客通过各种手段将恶意脚本注入用户的页面中,在数据传输的时候劫持网络数据包
常见的劫持手段有:
WIFI路由器劫持
本地恶意软件
XSS 攻击是指浏览器中执行恶意脚本, 然后拿到用户的信息进行操作。主要分为存储型、反射型和文档型。防范的措施包括:
对输入内容过滤或者转码,尤其是类似于script、img、a标签
利用CSP
利用Cookie的HttpOnly属性
什么是 CSRF?如何预防?
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。
一般的情况下,点开一个诱导你的链接,黑客会在你不知情的时候做哪些事情呢
- 自动发起 Get 请求
黑客网页里面可能有一段这样的代码
<img src="http://bank.example/withdraw?amount=10000&for=hacker" >
在受害者访问含有这个img的页面后,浏览器会自动向http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker发出一次HTTP请求。
bank.example就会收到包含受害者登录信息的一次跨域请求。
- 自动发起 POST 请求
<form action="http://bank.example/withdraw" method=POST>
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script>
访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。
同样也会携带相应的用户 cookie 信息,让服务器误以为是一个正常的用户在操作,让各种恶意的操作变为可能。
CSRF攻击原理,跟XSS对比的话,CSRF攻击并不需要将恶意代码注入HTML中,而是跳转新的页面,利用服务器的验证漏洞和用户之前的登录状态来模拟用户进行操作。
CSRF(Cross-site request forgery), 即跨站请求伪造,本质是冲着浏览器分不清发起请求是不是真正的用户本人,所以防范的关键在于在请求中放入黑客所不能伪造的信息。从而防止黑客伪造一个完整的请求欺骗服务器。
防范措施:
验证码机制,验证来源站点,利用Cookie的SameSite属性,CSRF Token
转载:https://blog.csdn.net/weixin_45292658/article/details/108233901