常见Web安全漏洞(一)

前言

XSS攻击一般指的是经过利用网页开发时留下的漏洞,经过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序一般是JavaScript,但实际上也能够包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能获得包括但不限于更高的权限(如执行一些操做)、私密网页内容、会话和cookie等各类内容。html

1、XSS

XSS (Cross-Site Scripting),跨站脚本攻击,由于缩写和CSS同样,因此就只能叫XSS。是很是常见的一种web攻击手段。XSS的原理是攻击者往Web页面插入恶意可执行网页脚本,当用户浏览这个页面的时候,嵌在网页中的脚本就会执行,从而达到窃取用户信息的目的。前端

XSS的攻击手段很是多,大体能够分为下面几个类型。web

1. 非持久型XSS,也叫反射型XSS

非持久型XSS攻击,顾名思义是一次性的攻击,仅对当前访问的页面产生影响。攻击者会让用户访问一个被篡改的URL,当用户访问该连接的时候就会触发预先插入网页中的脚本,从而达到攻击的目的。数据库

https://xxx.com/xxx?test=<script>alert(document.cookie)</script>
复制代码

举个例子: 攻击者能够经过上面的URL执行脚本代码alert('XSS')后端

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

持久型XSS漏洞,通常存在于表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的XSS漏洞,将攻击脚本经正常功能提交进入数据库持久保存,当前端页面得到后端从数据库中读出的注入代码时,刚好将其渲染执行。跨域

WeChat5a10e5ea6b59dd0198ab34d1bdee19c1.png 浏览器

相较于反射性XSS攻击,存储型XSS攻击更持久,危害性也更高。可是攻击成本也会相应的提升。安全

由于同时要知足几个条件:后端数据入库的时候没有进行转义。前端拿到数据没有转义直接渲染。任何一个条件的不知足都会致使攻击的失败。服务器

如何防护XSS攻击

从用户输入下手

咱们常说用户的输入是不可信的,把用户的输入想象成具备攻击性的代码。最广泛的作法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义。如今有不少开源的XSS Filter。markdown

输出格式化

在前端渲染的时候对可能存在攻击的内容作XSS过滤。转义格式化标志字符,从而禁止可疑代码的执行。想要对抗XSS,如下的字符转义内容是必不可少的:

特殊字符 实体编码
& &amp;
< &lt;
> &gt;
" &quot;
' &#x27;
/ &#x2F;

HttpOnly

这是预防XSS攻击窃取用户cookie最有效的防护手段。Web应用程序在设置cookie时,将其属性设为HttpOnly,就能够避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。

2、CSRF

什么是CSRF?

跨站请求伪造(Cross-site request forgery),也被称为one-click attack 或者session riding,一般缩写为CSRF 或者XSRF, 是一种挟制用户在当前已登陆的Web应用程序上执行非本意的操做的攻击方法。

如何防护CSRF?

经过如下几个原则能够大大减小CSRF的攻击:

  • Get请求不对数据进行修改
  • 不让第三方网站访问到用户Cookie
  • 阻止第三方网站请求接口
  • 请求时附带验证信息,好比验证码或者Token

(1)SameSite

对Cookie设置SameSite属性。该属性表示Cookie不随着跨域请求发送,能够很大程度减小CSRF的攻击。

(2)Token

在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器创建一个拦截器来验证这个token。服务器读取浏览器当前域cookie中这个token值,会进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为这是合法的请求。不然认为此次请求是违法的,拒绝该次服务。

(3)Referer

Referer是header的一部分,当浏览器向web服务器发送请求时,通常会带上Referer信息告诉服务器是从哪一个页面连接过来的,服务器籍此能够得到一些信息用于处理。能够经过检查请求的来源来防护CSRF攻击。正常请求的referer具备必定规律,如在提交表单的referer一定是在该页面发起的请求。因此经过检查http包头referer的值是否是这个页面,来判断是否是CSRF攻击。可是这个方法存在必定的风险。

(4)Verification code

这是一个偏向业务的方法,也在不少的网站中应用。当用户想要操做存在危险的动做,好比修改密码、更换本身的手机号、修改银行卡、转帐等操做的时候,进行验证码二次确承认以很大程度上提升安全性。

常见Web安全漏洞(二)

参考连接:

www.cnblogs.com/fundebug/p/…

zhuanlan.zhihu.com/p/163052063

tech.meituan.com/2018/10/11/…