XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和CSS一样,所以就只能叫XSS。是非常常见的一种web攻击手段。XSS的原理是攻击者往Web页面插入恶意可执行网页脚本,当用户浏览这个页面的时候,嵌在网页中的脚本就会执行,从而达到窃取用户信息的目的。
XSS的攻击手段非常多,大致可以分为下面几个类型。
非持久型XSS攻击,顾名思义是一次性的攻击,仅对当前访问的页面产生影响。攻击者会让用户访问一个被篡改的URL,当用户访问该链接的时候就会触发预先插入网页中的脚本,从而达到攻击的目的。
https://xxx.com/xxx?test=
举个例子: 攻击者可以通过上面的URL执行脚本代码alert(‘XSS’)
持久型XSS漏洞,一般存在于表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的XSS漏洞,将攻击脚本经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。
WeChat5a10e5ea6b59dd0198ab34d1bdee19c1.png
相较于反射性XSS攻击,存储型XSS攻击更持久,危害性也更高。但是攻击成本也会相应的提高。
因为同时要满足几个条件:后端数据入库的时候没有进行转义。前端拿到数据没有转义直接渲染。任何一个条件的不满足都会导致攻击的失败。
我们常说用户的输入是不可信的,把用户的输入想象成具有攻击性的代码。最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义。现在有很多开源的XSS Filter。
在前端渲染的时候对可能存在攻击的内容做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攻击。但是这个方法存在一定的风险。
这是一个偏向业务的方法,也在很多的网站中应用。当用户想要操作存在危险的动作,比如修改密码、更换自己的手机号、修改银行卡、转账等操作的时候,进行验证码二次确认可以很大程度上提高安全性。
https://www.cnblogs.com/fundebug/p/details-about-6-web-security.html
https://zhuanlan.zhihu.com/p/163052063
https://tech.meituan.com/2018/10/11/fe-security-csrf.html