面试 07-安全问题:CSRF和XSS

摘要:
07安全问题:CSRF和XSS中的安全问题#前言访谈,具体在两个方面:CSRF:基本概念、攻击方法和防御措施XSS:基本概念,攻击方法和防护措施。一般来说,问他们并不难。这个过程就像一个反射,所以它被称为反射XSS。参考链接:XSS防御的4种有效方法。2.过滤:删除与用户输入的事件相关的属性#CSRF和XSS之间的差异面试官可能也想询问这些差异。
07-安全问题:CSRF和XSS

#前言

面试中的安全问题,明确来说,就两个方面:

  • CSRF:基本概念、攻击方式、防御措施

  • XSS:基本概念、攻击方式、防御措施

这两个问题,一般不会问太难。

有人问:SQL注入算吗?答案:这个其实跟前端的关系不是很大。

#CSRF

问的不难,一般问:

  • CSRF的基本概念、缩写、全称

  • 攻击原理

  • 防御措施

如果把攻击原理和防御措施掌握好,基本没什么问题。

#1、CSRF的基本概念、缩写、全称

CSRF(Cross-site request forgery):跨站请求伪造。

PS:中文名一定要记住。英文全称,如果记不住也拉倒。

#2、CSRF的攻击原理

面试 07-安全问题:CSRF和XSS第1张

用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cookie。

从上图可以看出,要完成一次CSRF攻击,受害者必须满足两个必要的条件:

(1)登录受信任网站A,并在本地生成Cookie。(如果用户没有登录网站A,那么网站B在诱导的时候,请求网站A的api接口时,会提示你登录)

(2)在不登出A的情况下,访问危险网站B(其实是利用了网站A的漏洞)。

我们在讲CSRF时,一定要把上面的两点说清楚。

温馨提示一下,cookie保证了用户可以处于登录状态,但网站B其实拿不到 cookie。

举个例子,前段时间里,微博网站有个api接口有漏洞,导致很多用户的粉丝暴增。

#3、CSRF如何防御

方法一、Token 验证:(用的最多)

(1)服务器发送给客户端一个token;

(2)客户端提交的表单中带着这个token。

(3)如果这个 token 不合法,那么服务器拒绝这个请求。

方法二:隐藏令牌:

把 token 隐藏在 http 的 head头中。

方法二和方法一有点像,本质上没有太大区别,只是使用方式上有区别。

方法三、Referer 验证:

Referer 指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。

#XSS

#1、XSS的基本概念

XSS(Cross Site Scripting):跨域脚本攻击。

接下来,我们详细讲一下 XSS 的内容。

预备知识:HTTP、Cookie、Ajax。

#XSS的攻击原理

XSS攻击的核心原理是:不需要你做任何的登录认证,它会通过合法的操作(比如在url中输入、在评论框中输入),向你的页面注入脚本(可能是js、hmtl代码块等)。

最后导致的结果可能是:

  • 盗用Cookie

  • 破坏页面的正常结构,插入广告等恶意内容

  • D-doss攻击

#XSS的攻击方式

  • 1、反射型

发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。

  • 2、存储型

存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次请求时目标页面时不用再提交XSS代码。

#XSS的防范措施(encode + 过滤)

XSS的防范措施主要有三个:

1、编码:

对用户输入的数据进行HTML Entity编码。

如上图所示,把字符转换成 转义字符。

Encode的作用是将$var等一些字符进行转化,使得浏览器在最终输出结果上是一样的。

比如说这段代码:

<script>alert(1)</script>
1

若不进行任何处理,则浏览器会执行alert的js操作,实现XSS注入。

进行编码处理之后,L在浏览器中的显示结果就是<script>alert(1)</script>,实现了将$var作为纯文本进行输出,且不引起JavaScript的执行。

参考链接:4类防御XSS的有效方法

2、过滤:

  • 移除用户输入的和事件相关的属性。如onerror可以自动触发攻击,还有onclick等。(总而言之,过滤掉一些不安全的内容)

  • 移除用户输入的Style节点、Script节点、Iframe节点。(尤其是Script节点,它可是支持跨域的呀,一定要移除)。

3、校正

  • 避免直接对HTML Entity进行解码。

  • 使用DOM Parse转换,校正不配对的DOM标签。

备注:我们应该去了解一下DOM Parse这个概念,它的作用是把文本解析成DOM结构。

比较常用的做法是,通过第一步的编码转成文本,然后第三步转成DOM对象,然后经过第二步的过滤。

还有一种简洁的答案:

首先是encode,如果是富文本,就白名单。

#CSRF 和 XSS 的区别

面试官还可能喜欢问二者的区别。

区别一:

  • CSRF:需要用户先登录网站A,获取 cookie。

  • XSS:不需要登录。

区别二:(原理的区别)

  • CSRF:是利用网站A本身的漏洞,去请求网站A的api。

  • XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。

#其他

#XSS

关于XSS,推荐几个网站:

里面列出了很多XSS的例子,可以长见识。如果你专门研究XSS,可以看看。

比如,他的第一篇文章就讲到了XSS的原理分析与解剖。有句话摘抄如下:弹窗只是测试xss的存在性和使用性。

比如,这个人还有篇文章写自动化检测CSRF(第一章)。大公司做网站,一般会做嗅探服务(比如自动化工具做CSRF的检测、自动化的方式控制安全风险)。

另外,可能还有些工具,可以扫描代码本身有没有一些安全问题。

这是GitHub上的一个德国组织。

上面的项目都跟安全相关,有些仓库是可以直接运行的。如果你不需要定制,就可以直接用别人的,没必要自己写XSS库、XSS的过滤之类的,避免麻烦。

免责声明:文章转载自《面试 07-安全问题:CSRF和XSS》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android Studio 3.4.1中使用com.android.support.v4.view.ViewPager提示不存在该类或程序闪退C# 多线程同步与异步的实现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

跨境电商那些黑号钓鱼号的来源套路分析

亚马逊黑号,可以用来用来做刷单,FB黑号可以用来打广告,发POST贴文等等,这些是比较大众的用法,当人不排除用来用这些号做了极致。 既然有这个需求,那么相应就有扫号,爆号的环节,整个产业链呢,有是 一环扣一环。 读下去,小白可能会白眼吐唾沫了,先晒图为敬!! 一般钓鱼号的来源 鉴于老农技术停留在小白的阶段,这里按我的分析,这些号主要来源有以下两个 1...

前端数据存储方案集合(cookie localStorage等)以及详解 (一)

客户端、前端 存储 一、 起 因 首先解释下为什么想来写这个关于前端存储的问题,因为最近在做小程序相关的内容。但是,在开发过程中,我们难免会遇到 token 存储、 代码缓存、 图片存储等等。 以及可能存在的 一系列的问题。 现在,我们就专门从 浏览器 存储 入手,来真正的了解 缓存 存在的 场景,以及在日常开发中,我们需要 缓存的地方,以及使用...

ASP.NET Core [4]: Authentication(笔记)

原文连接:http://www.cnblogs.com/RainingNight/p/authentication-in-asp-net-core.html 在现代应用程序中,认证已不再是简单的将用户凭证保存在浏览器中,而要适应多种场景,如App,WebAPI,第三方登录等等。在 ASP.NET 4.x 时代的Windows认证和Forms认证已无法满足现...

js-cookie 插件的使用方法, cookie的使用存储和删除

一、安装 npm install js-cookie --save 二、引用 import Cookies from 'js-cookie' 三、一般使用 存到Cookie去 // Create a cookie, valid across the entire site:   Cookies.set('name', 'value');       /...

转:jmeter性能测试---登录百度进行搜索

在做web程序性能测试时,loadrunner和jmeter是两款常用的工具,两者比较起来,jmeter非常轻巧,且开源免费,上手快。这里简单介绍下jmeter的使用,以登录百度进行搜索为例。 jmeter运行需要jdk环境,这个不多做介绍。软件界面: 右击“测试计划”,添加一个线程组 线程组界面可以配置线程的数量,“Ramp-Up Period(i...

解决nginx使用proxy_pass反向代理时,cookie丢失的问题

1. 如果只是host、端口转换,则cookie不会丢失。例如:location /project {proxy_pass http://127.0.0.1:8080/project; } 通过浏览器访问http://127.0.0.1/project时,浏览器的cookie内有jsessionid。再次访问时,浏览器会发送当前的cookie。2. 如果路...