4、xss和csrf的攻击和防御

本文详细介绍了两种常见的Web攻击——XSS和CSRF,包括它们的工作原理、攻击分类和防御措施。XSS(跨站脚本攻击)通过在用户浏览器中注入恶意脚本获取用户隐私信息;CSRF(跨站请求伪造)则利用用户身份伪造合法请求。文章还提供了具体的防御策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在互联网普遍的时代,数据安全和个人隐私很容易被泄露,黑客的攻击手段也是层出不穷,本文主要分析两种常见的web攻击(XSS和CSRF)和防御措施。

什么是XSS?

XSS(cross-site script)跨站脚本攻击(因缩写和CSS重复,所以叫XSS),指的是攻击者通过在用户浏览器注入恶意可执行脚本,获取用户隐私信息的攻击方式。简单来说就是指利用网站漏洞从用户那里恶意盗取信息。

XSS是一种常见于 Web 应用中的计算机安全漏洞,恶意攻击者向 Web 页面里嵌入恶意的客户端脚本,当用户浏览此网页时,脚本就会在用户的浏览器上执行,进而达到攻击者的目的。比如获取用户的 Cookie、导航到恶意网站、携带木马等;

大部分的 XSS 漏洞都是由于没有处理好用户的输入,导致恶意脚本在浏览器中执行。任何输入提交数据的地方都有可能存在 XSS并且其所有输入都是有害的。

XSS攻击分类

1. 非持久型XSS(反射型XSS)

用户在页面输入框中输入数据,通过 get 或者 post 方法向服务器端传递数据,输入的数据一般是放在 URL 的 query string 中,或者是 form 表单中,如果服务端没有对这些数据进行过滤验证或者编码,直接将用户输入的数据呈现出来,就可能会造成反射型 XSS。反射型 XSS 是非常普遍的,其危害程度通常较小,但是某些反射型 XSS 还是会造成严重后果的。 黑客通常通过构造一个包含 XSS 代码的 URL,诱导用户点击链接,触发 XSS 代码,达到劫持访问、获取 用户cookies 的目的。不过一些浏览器比如chrome内置了一些XSS的过滤器,能够防止大部分的非持久型XSS。

2.持久型XSS(存储型XSS)

 通过表单提交的方式,将带有恶意脚本的内容提交到服务端,服务器端没有经过验证就存储在数据库中。当页面被打开时,存储在数据库中的恶意脚本被返回到页面并解析执行,从而达到获取用户隐私信息的目的。持久型的 XSS 攻击相比非持久型的危害性更大,因为每当用户打开页面,恶意脚本都会执行。

XSS 常见攻击方法

  1. 绕过 XSS-Filter,利用 <> 标签注入 Html/JavaScript 代码;
  2. 空格、回车和 Tab。如果 XSS Filter 仅仅将敏感的输入字符列入黑名单,比如 javascript,用户可以利用空格、回车和 Tab 键来绕过过滤,例如:<img src=“javas cript:alert(/xss/);”/>
  3. 利用 HTML 标签的属性值进行 XSS 攻击。例如:<img src=“javascript:alert(‘xss’)”/>;(当然并不是所有的 Web 浏览器都支持 Javascript 伪协议,所以此类 XSS 攻击具有一定的局限性)
  4. 扰乱过滤规则;
  5. 利用字符编码,通过这种技巧,不仅能让 XSS 代码绕过服务端的过滤,还能更好地隐藏 Shellcode;( JS 支持 unicode、eacapes、十六进制、十进制等编码形式);

XSS防御措施

XSS 漏洞是由于对用户提交的数据没有经过严格的过滤处理造成的,所以防御的原则就是不相信用户输入的数据,对输入进行过滤,对输出进行编码。

1.开启浏览器的CSP

CSP本质上就是设置白名单,开发者明确告诉浏览器哪些外部资源是可以加载和执行的。开发者可以去配置规则。开启CSP有两种方式:一种是通过HTTP Header设置,一种是通过设置meta标签。

2.html 实体

在 html 中有些字符对于 HTML 来说是具有特殊意义的,所以这些特殊字符不允许在文本中直接使用,需要使用实体字符。 html 实体的存在是导致 XSS 漏洞的主要愿意之一,因此我们需要将实体转化为相应的实体编号。下面是部分html实体:

3.JavaScript编码

主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,除了上面的那些转义之外,还要附加上下面的转义: 

\ 转成 \\

/ 转成 \/

; 转成 ;(全角;)

4.对cookie设置HttpOnly属性。这样的话当浏览器向服务端发起请求时就会带上 cookie 字段,javascript是获取不到设置了HttpOnly属性的cookie内容的。这是防止XSS攻击窃取用户cookie最有效的防御手段。

什么是CSRF?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF。是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作(向服务器发送非法请求)的攻击方法。通常是,攻击者借助受害者的cookie骗取服务器的信任,在受害者毫不知情的情况下,用受害者的名义伪造请求发送给服务器。

跟XSS相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

CSRF攻击攻击原理及过程如下:

  1. 用户打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3.  用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。(网站A并不知道该请求其实是由B发起的,所以 )网站A会根据用户的Cookie信息以用户的权限处理该请求,导致来自网站B的恶意代码被执行。

CSRF防御措施

目前防御 CSRF 攻击主要有三种策略:

1.验证 HTTP Referer 字段。根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。

2.在请求地址中添加 token 并验证。在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。但是该方法难以保证 token 本身的安全。

3.在 HTTP 头中自定义属性并验证。这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值