详解XSS攻击与CSRF攻击

什么是XSS攻击?

XSS中文名称就是跨站脚本攻击。XSS的重点不在于跨站点而在于脚本的执行,那么XSS的原理是:恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中的script代码会执行,因此会达到恶意攻击用户的目的。XSS攻击分为如下几类:反射型、存储型、DOM-based型,反射型和DOM-based型可以归类为非持久的XSS攻击,存储型可以归类为持久性的XSS攻击。

反射型XSS

简而言之,代码出现在url中,作为输入提交到服务器端
原理:反射型xss一般指攻击者通过特定方式来诱惑受害者去访问一个包含恶意代码的url,当受害者点击恶意链接url的时候,恶意代码会直接在受害者的主机的浏览器上执行。

反射型xss又叫非持久性xss,为什么叫反射型是因为这种攻击方式的注入代码是从目标服务器通过错误信息,搜索结果等方式反射回来的,那为什么叫非持久呢?因为这种攻击方式只有一次

比如:攻击者通过电子邮件等方式将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接的时候,注入脚本被传输到目标服务器上,然后服务器将注入脚本 "反射"到受害者的浏览器上,从而浏览器就执行了该脚本。

因此反射型xss的攻击步骤如下:

  1. 攻击者在url后面的参数中加入恶意攻击代码
  2. 当用户打开恶意代码的url的时候,网站服务器端将恶意代码从服务器端提取,拼接在html中并返回给浏览器端
  3. 用户浏览器接收到响应后执行解析,其中恶意代码就被执行
  4. 攻击者将通过恶意代码来窃取到用户数据并发送到攻击者网站,攻击者会获取到比如cookie等信息,然后使用信息来冒充用户的行为

常见的反射性XSS有哪些?
常见的是:恶意链接。

存储型XSS

存储型XSS主要是将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码‘,简而言之,提交的代码会存储在服务器端,不用再提交XSS代码。

比如我现在做了一个博客网站,然后攻击者在上面发布了一篇文章,内容是如下:如果我没有对该文章进行任何处理的话,直接存入到数据库中,那么下一次当其他用户访问该文章的时候,服务器会从数据库中读取后然后响应给客户端,那么浏览器就会执行这段脚本,然后攻击者就会获取到用户的cookie,然后会把cookie发送到攻击者的服务器上了。

存储型XSS攻击步骤如下:

  1. 攻击者将恶意代码提交到目标网站数据库中
  2. 用户打开目标网站的时候,网站服务器将恶意代码从数据库中提取出来,然后拼接到html中返回给浏览器
  3. 用户浏览器接收响应后解析执行,那么其中的恶意代码也会被执行
  4. 那么恶意代码执行之后,就能获取到用户数据,比如上面的cookie等信息

如何防范?
后端需要对提交的数据进行过滤。
前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

DOM-based型XSS

我们客户端的js可以对页面dom节点进行动态的操作,比如插入、修改页面的内容,比如客户端从url中提取数据并且在本地执行、如果用户在客户端输入的数据包含了恶意的js脚本的话,但是这些脚本又没有做任何过滤处理的话,那么我们的应用程序就有可能受到DOM-basesXSS攻击。因此DOM型XSS的攻击步骤如下:

  1. 攻击者构造出特殊的URL、在其中可能包含恶意的代码
  2. 用户打开带有恶意代码的url
  3. 用户浏览器接收到响应后解析执行,前端使用js取出url中的恶意代码并执行
  4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作。调用目标网站接口执行攻击者一些操作。

什么是CSRF?

WEB安全中经常谈到的两个东西:XSS和CSRF。
CSRF是跨站请求伪造,如果从名字你还不知道它表示什么,你可以这样理解:攻击者(黑客,钓鱼网站)盗用了你的身份,以你的名义发送恶意请求,这些钱请求包括发送邮件、发送信息、盗取账号、购买商品、银行转账。

要完成一次CSRF攻击受害者必须完成以下步骤:

  1. 登录受信任的网站A,并且本地生成了cookie
  2. 在不登出网站A的情况下,访问危险网站B

详解XSS攻击与CSRF攻击_第1张图片
几种常见的攻击类型;
(1)GET类型的CSRF
GET类型的CSRF十分简单,只需要一个HTTP请求
(2)POST类型的CSRF
这种类型的CSRF危害没有GET的大,利用起来通常是一个自动提交的表单

防御措施:
(1)Token验证
客户端使用用户名跟密码请求登录,服务端收到请求,去验证用户名与密码,验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端,客户端提交的表单中携带该token,如果这个token不合法,那么服务器就会拒绝这个请求
(2)隐藏令牌
把token隐藏在http的head中,和方法1类似只是使用方式不同
(3)Referer验证
只接受本站的请求,服务器才做出响应

区别

详解XSS攻击与CSRF攻击_第2张图片

你可能感兴趣的:(安全,面试经典,安全漏洞)