XSS攻击一般指的是经过利用网页开发时留下的漏洞,经过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序一般是JavaScript,但实际上也能够包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能获得包括但不限于更高的权限(如执行一些操做)、私密网页内容、会话和cookie等各类内容。html
XSS (Cross-Site Scripting),跨站脚本攻击,由于缩写和CSS同样,因此就只能叫XSS。是很是常见的一种web攻击手段。XSS的原理是攻击者往Web页面插入恶意可执行网页脚本,当用户浏览这个页面的时候,嵌在网页中的脚本就会执行,从而达到窃取用户信息的目的。前端
XSS的攻击手段很是多,大体能够分为下面几个类型。web
非持久型XSS攻击,顾名思义是一次性的攻击,仅对当前访问的页面产生影响。攻击者会让用户访问一个被篡改的URL,当用户访问该连接的时候就会触发预先插入网页中的脚本,从而达到攻击的目的。数据库
https://xxx.com/xxx?test=<script>alert(document.cookie)</script>
复制代码
举个例子: 攻击者能够经过上面的URL执行脚本代码alert('XSS')后端
持久型XSS漏洞,通常存在于表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的XSS漏洞,将攻击脚本经正常功能提交进入数据库持久保存,当前端页面得到后端从数据库中读出的注入代码时,刚好将其渲染执行。跨域
WeChat5a10e5ea6b59dd0198ab34d1bdee19c1.png 浏览器
相较于反射性XSS攻击,存储型XSS攻击更持久,危害性也更高。可是攻击成本也会相应的提升。安全
由于同时要知足几个条件:后端数据入库的时候没有进行转义。前端拿到数据没有转义直接渲染。任何一个条件的不知足都会致使攻击的失败。服务器
咱们常说用户的输入是不可信的,把用户的输入想象成具备攻击性的代码。最广泛的作法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义。如今有不少开源的XSS Filter。markdown
在前端渲染的时候对可能存在攻击的内容作XSS过滤。转义格式化标志字符,从而禁止可疑代码的执行。想要对抗XSS,如下的字符转义内容是必不可少的:
特殊字符 | 实体编码 |
---|---|
& | & |
< | < |
> | > |
" | " |
' | ' |
/ | / |
这是预防XSS攻击窃取用户cookie最有效的防护手段。Web应用程序在设置cookie时,将其属性设为HttpOnly,就能够避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。
跨站请求伪造(Cross-site request forgery),也被称为one-click attack 或者session riding,一般缩写为CSRF 或者XSRF, 是一种挟制用户在当前已登陆的Web应用程序上执行非本意的操做的攻击方法。
经过如下几个原则能够大大减小CSRF的攻击:
对Cookie设置SameSite属性。该属性表示Cookie不随着跨域请求发送,能够很大程度减小CSRF的攻击。
在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器创建一个拦截器来验证这个token。服务器读取浏览器当前域cookie中这个token值,会进行校验该请求当中的token和cookie当中的token值是否都存在且相等,才认为这是合法的请求。不然认为此次请求是违法的,拒绝该次服务。
Referer是header的一部分,当浏览器向web服务器发送请求时,通常会带上Referer信息告诉服务器是从哪一个页面连接过来的,服务器籍此能够得到一些信息用于处理。能够经过检查请求的来源来防护CSRF攻击。正常请求的referer具备必定规律,如在提交表单的referer一定是在该页面发起的请求。因此经过检查http包头referer的值是否是这个页面,来判断是否是CSRF攻击。可是这个方法存在必定的风险。
这是一个偏向业务的方法,也在不少的网站中应用。当用户想要操做存在危险的动做,好比修改密码、更换本身的手机号、修改银行卡、转帐等操做的时候,进行验证码二次确承认以很大程度上提升安全性。