前端安全面试题

什么是XSS

Cross-Site Scripting(跨站脚本攻击),简称XSS,是一种代码注入攻击。攻击者通过目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可以获取用户的敏感信息,如Cookie,SessionID等,进而危害数据安全。为了和CSS区分,这里把代码的第一个字母改为X,于是叫做XSS

XSS的本质

恶意代码未经过滤,与网站正常的代码混在一起,浏览器无法分辨那些脚本是可信的,导致恶意脚本被执行。

而由于直接在用户的终端执行,恶意代码能够直接获取用户的信息,或者利用这些信息冒充用户向网站发起攻击者定义请求

在部分情况下,由于输入的限制,注入的恶意脚本比较短,但可以通过引入外部的脚本,并有浏览器执行,来完成比较复杂的攻击策略

XSS分为哪几类

类型 存储区 插入区
存储型 后端数据库 HTML
反射区 URL HTML
DOM型 后端数据库/前端存储/URL 前端javascript

存储区:恶意代码存放的位置,
插入点:由谁取的恶意代码,并插入到网页上

存储型XSS

攻击步骤
1.攻击者将恶意代码提交到目标网站的数据库中
2.用户打开目标网站时,网站服务端将恶意代码从数据库中取出,拼接在HTML中返回给浏览器。
3.用户浏览器接收到相应后解析执行,混在其中的恶意代码也被执行
4.恶意代码窃取用户数据并发送攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

场景:
用户保存数据的网站功能,如论坛发帖,商品评论,用户私信

反射型XSS

攻击步骤
1.攻击者构造出特殊的URL,其中包含恶意代码
2.用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器。
3.用户浏览器接收到相应后解析执行,混在其中恶意代码也被执行
4.恶意代码窃取yoghurt的数据并发送黑攻击者的网站,或冒充用户行为,调用目标网站接口执行攻击者指定的操作

存储型和反射型XSS的区别
存储型的XSS恶意代码是存储在数据库里面的,反射型XSS恶意代码是存储在URL中

场景:反射型XSS漏洞常见于通过URL传递参数的功能,例如:网站搜索,页面跳转等

DOM型XSS

攻击步骤
1.攻击者构造特殊的URL,其中包含恶意代码
2.用户打开带有恶意的代码URL
3.用户浏览器接收到相应后解析执行,前端javscript取出URL中恶意代码并执行
4恶意代码窃取用户数据并发送给攻击者网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定操作

解决方案

输入过滤,纯前端渲染,转义HTML

CSRF

什么是CSRF

CSRF是跨站请求伪造,攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经注册的凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某种操作

一个经典的CRSF攻击有如下流程:
1.受害者登录a.com,并保留了登录的凭证(cookie)
2.攻击者引导受害者访问b.com
3.b.com向a.com发送一个请求:a.com/act=xx浏览器会默认携带a.com的cookie
4.a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,并误以为是受害者自己发送的请求
5.a.com以受害者的名义执行了act=xx
6.攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行自己定义的操作

CRSF的特点

1.攻击者一般发起在第三方网站,而不是被攻击的网站,被攻击的网站无法防止攻击发生
2.攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,而不是直接窃取数据
3.整个过程攻击者并不能获取受害者的登录凭证,仅仅是冒用
4.跨站请求可以是各种方式:图片URL,超链接,CORS,FROM提交等,部分请求方式可以直接嵌入在第三方论坛文章中,难以进行追踪。

CRSF通常是跨域的,因为外域更容易被攻击者掌握

CRSF的攻击者类型

Get类型的CSRF

Get类型的CSRF利用非常简单,只需要一个HTTP请求Get类型我们刻意在图片里面隐藏一个链接进行攻击)

Post类型CSRF

这种攻击通常是使用一个自动提交表单,访问该页面后,表单会自动提交,相当于模拟用户完成了一次Post请求,Post类型攻击要比Get要求严格一点,但是并不复杂,任何个人网站,博客,被黑客上传页面的网站都有可能是发起攻击的来源,后端接口不能将安全寄托在允许POST上面

链接类型的CSRF

这种方式并不是很常见,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布图片中嵌入恶意链接,或者以广告的形式诱导用户中招。

如何预防CSRF

csrf通常是由第三方网站发起的,被攻击的网站无法防止攻击的发生,只能增强自己网站针对CSRF的防护能力提高安全性。

CSRF的两个特点:
CSFR发生在第三方域名
CSRF攻击者不能获取cookie等信息,只是使用

针对这两点,方法如下:
1.阻止不明外域的访问
(同源检测,samesite cookie)

2.提交时要附加本域才能获取的信息
(CSRF Token,双重cookie验证)

同源检测:

CSRF大多来自第三方网站,那么我们直接禁止外域对我们的请求

在HTTP协议中。每一个异步请求都会携带两个header,用于标记来源域名,origin header和Referer Header,这两个Header在浏览器发起请求时,大多数情况都会自动带上,并且不能由前端自定义内容,服务器可以通过解析这两个header中的域名确定请求来源方式。

CSRF Token

CSFR是攻击者无法窃取用户的信息(cookie,header,网站内容),是冒用cookie中的信息。

CSRF攻击之所以能够成功,是因为服务器把攻击者发送请求当成用户自己的请求,我们可以要求所有用户请求都要携带一个CSRF攻击者无法获取到的Token.服务器通过效验请求是否携带正确的Token,来把正确的请求和攻击请求区分。

你可能感兴趣的:(前端,安全,web安全)