XSS攻击、CSRF攻击、SQL注入、中间人攻击
1、XSS攻击
(1)概念
XSS攻击指的跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户信息cookie等。
(2)本质
因为网站没有对恶意代码进行过滤,与正常代码混在了一起,浏览器没有办法区分哪个代码是可信的,从而导致了恶意代码的执行。
攻击者可以通过这种攻击方式进行一下操作:
获取页面的数据,如DOM,cookie,localStorage;
DOS攻击,发送合理请求,占用服务器资源,从而使用户无法访问服务器;
破坏页面结构
流量劫持(将连接指向其他网站)
2、攻击类型
XSS可以分为存储型、反射性和DOM型:
1、存储型指的是恶意脚本存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行
2、反射型指的是攻击者诱导用户访问一个带有恶意的URL后,服务器端接受数据后处理,然后把带有恶意代码的数据发送到浏览器端,浏览器解析这段带有XSS代码的数据后做脚本执行,最终完成XSS攻击
3、DOM型指的是通过修改DOM节点形成的XSS;
2.1存储型XSS的攻击步骤
1、攻击者将恶意代码提交到目标网站的数据库中
2、用户打开目标网站时,网站服务端将恶意代码从数据库中取出,凭借在HTML返回到浏览器
3、用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
4、恶意代码窃取用户数据发送到攻击者的网站,或者冒充用户的行为,调用网站接口执行攻击者的指定操作。
这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
2.2反射型XSS的攻击步骤
1、攻击者构造出特殊的URL,其中包含恶意代码
2、用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回浏览器。
3、用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
4、恶意代码窃取用户数据发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定操作
反射型XSS漏洞常见于URL传递参数的功能,如网站搜索、跳转等。由于需要用户主动打开恶意URL才能生效,攻击者往往会结合多种手段诱导用户点击。
2.3DOM型XSS的攻击步骤
1、攻击者构造出特殊的URL,其中包含恶意代码
2、用户打开带有恶意代码的URL
3、用户浏览器接收到响应后的解析执行,前端JS取出URL中的恶意代码并执行。
4、恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户行为,调用目标网站接口执行攻击者指定操作
反射型XSS跟存储型XSS的区别是:存储型XSS的恶意代码存储在数据库,反射型是将恶意代码放在url里。
总结:DOM型XSS跟前两种XSS的区别:DOM型XSS攻击中,去除和执行恶意代码由浏览器端完成,属于前端JS安全漏洞,而其他两种XSS属于服务端安全漏洞。
2、如何防御XSS攻击?
1、可以从浏览器执行来进行预防,一种是纯前端,一种是不用服务器端拼接后返回(不适用服务端渲染)。
2、是对需要插入到HTML中的代码做充分的转义。对于DOM型攻击,主要是前端脚本的不可靠造成,对于数据获取渲染和字符串拼接的时候应该对可能出现恶意代码的情况进行判断。
对一些敏感信息进行保护,比如cookie使用http-only,使脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作。、
2、CSRF(跨站伪造请求攻击)攻击
典型的CSRF攻击流程:
1、受害者登录a.com,并且在cookie中保留了登录凭证。
2、攻击者引诱受害者访问了b.com
3、b.com会主动发起a.com/xx等的请求,这时候因为受害者带了cookie,a.com接收到请求后,对请求进行验证,确认是否是受害者,这样就误认为是受害者
4、b.com就可以让a.com执行a.com名义下的操作。
5、完成攻击,攻击者在受害者不知情的情况,让a.com执行了自己的操作。
(1)概念
CSRF攻击指的是跨站请求伪造攻击,攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。
如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。
(2)攻击类型
常见CSRF攻击类型三种:
GET类型CSRF攻击,比如在网站中的一个img标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交。
POST类型CSRF攻击,比如构建一个表单隐藏它,当用户进入页面,自动提交这个页面
链接类型的CSRF攻击,比如a标签的href里构建一个请求,然后诱导点击
3、CSRF攻击可以使用以下方法保护
(1)进行同源检测,服务器根据http请求头的origin或者referer信息来判断请求是否为允许访问的站点,从而对请求进行过滤。
当origin或者referer信息都不存在的时候,直接组织请求。这种方式缺点referer也可能被伪造,同时搜索引擎的链接也给屏蔽了。所以一般网站会允许搜索引擎的页面请求。
但是相应的页面请求这种请求方式也可能被攻击者攻击。referer告诉服务器该网站是从那个页面过来的)
(2)CSRF-token进行验证,服务器向用户返回一个随机token,当网站再次请求时,在请求参数中加入返回的token,然后服务器对这个token验证。这种办法解决了
使用了cookie单一验证方式,可能会被冒用。但是这个方法的缺点。需要给网站中所有请求都加一个token,操作比较繁琐。还有一个问题是一般不会只有一台服务器,如果请求负载均衡
但是这个服务器session没有这个token就没办法验证了
(3)cookie双重验证,服务器器访问网站页面时,向请求注入cookie,内容为随机字符串,然后当用户再次向服务器发送请求,从cookie中取出这个字符串,添加到url。这种方式利用了
攻击者只能利用cookie不能访问cookie的特点。并且这种方法比CSRF token的方法更加方便并且不设计分布式访问的问题。这种方法的缺点是如果网站存在XSS漏洞,那么这种方式会失效。
同时这种方式不能做到子域名隔离。
(4)设置cookie属性设置samesite,限制cookie不能被第三方使用,从而避免被攻击者利用。一种是严格模式在任何情况不能被第三方拿、一种是宽松模式 cookie可以被get,且发生页面跳转的请求所使用。
中间人攻击
攻击过程如下:
1、客户端发送请求到服务端,请求被中间人攻击
2、服务端向客户端发送公钥
3、中间人获取公钥。然后自己生成一个伪公钥,发送给客户端
4、客户端收到公钥后,生成加密hash发给服务器。
5、中间人获得加密hash值,用自己的私钥解密获得真秘钥,同时生成假的hash值,发送给服务器
6、服务器用私钥解密获得假秘钥,然后加密数据传输给客户端。
https://zhuanlan.zhihu.com/p/43789231