安全防范面试题
安全防范面试题
XSS跨域脚本攻击
提示
XSS攻击简单来说就是攻击者想尽一切办法把可执行的代码嵌入到页面中,以达到非法窃取某些数据或者破坏的目的。
依据情景的不同,XSS攻击可分为几种类型。
反射性XSS
反射性XSS也叫做非持久性XSS,是指发生请求时,XSS代码会出现在请求的URL中,作为参数提交到服务器,服务器接受并响应。响应结果中包含XSS代码,最后通过浏览器进行解析并执行,一个反射性XSS可能如下所示
function ajax(url) {
return new Promise((resolve,reject) => {
setTimeout(() => {
resolve(url.split('?')[1]);
}, 1500)
})
}
var url = 'https://www.baidu.com/getUserInfo?name=<script>alert(document.cookie)</script>';
ajax(url).then(data => {
document.body.insertAdjacentHTML('beforeend', data.split('=')[1])
})
存储型XSS
存储型XSS也叫持久性XSS,它的主要攻击方式是将代码发送到服务器,最常见的存储型XSS攻击就是评论或者浏览攻击,一个存储型XSS可能如下图所示:
XSS防御
提示
- 将由用户输入的内容,进行必要的标签转义,包括
<
、>
、/
等 - 再服务端设置
cookit
属性httpOnly
防止客户端通过document.cookie
读取 - 过滤一些危险属性或者方法,例如
onerror
方法、href
属性、src
属性等
CSP内容安全策略
提示
CSP内容安全策略本质上来说是建立白名单机制,告诉浏览器哪些外部资源可以加载和执行,我们只需要配置,拦截主要交给浏览器。
通常有两种方法设置CSP:
- 通过设置
HTTP Header
的Content-Security-Policy
- 通过
meta
标签来设置,例如:<meta http-equiv="Content-Security-Policy">
CSRF跨域请求伪造
提示
CSRF攻击原理上是攻击者伪造一个后端请求地址,诱导用户进行点击,如果用户在已登录的情况下点击了这个危险链接,则后端服务器会认为是用户在正常访问,攻击者从而可以从请求中拿到一些信息,进而进行攻击。
CSRF防御
提示
CSRF防御有如下几种方式:
Get
请求不对数据进行修改- 不让第三方网站访问用户的
Cookie
,可以通过Cookie
的SameSite
属性 - 阻止第三方网站请求
- 在进行请求时,附加
refer
验证和token
验证
点击劫持
提示
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
防御手段
设置HTTP响应头X-FRAME-OPTIONS
,它可以设置DENY
、SAMEORIGIN
、ALLOW-FROM
分别表示不允许iframe
展示、只允许永远iframe
展示、表示页面可以在指定来源的iframe
中展示。
中间人攻击
提示
中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。一般来说使用HTTPS
协议可以有效防止中间人攻击,但并不是说HTTPS
就可以高枕无忧,因为攻击者可以通过某种方式从HTTPS
降级到HTTP
进行访问。