XSS简介

XSS(Cross Site Script),即跨站脚本攻击;其原本缩写是 CSS,但为了和层叠样式表(Cascading Style Sheet)有所区分,在安全领域叫做 XSS。

XSS 攻击是指攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。

攻击者对客户端网页注入的恶意脚本一般都是 JavaScript,有时也会包含 HTML 。有很多种方式进行 XSS 攻击,但它们的共同点为:将一些隐私数据像 cookie、session 发送给攻击者,将受害者重定向到一个由攻击者控制的网站,在受害者的机器上进行一些恶意操作。

XSS攻击可以分为两类:反射型(非持久型)和 存储型(持久型)

  1. 反射型:发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。
  2. 存储型:储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器端(数据库、内存、文件系统等),下次有人请求目标页面时不用再提交XSS代码。
  3. DOM型:利用浏览器的dom解析,更不容易被发现,可以更改页面布局。

防范XSS攻击的方式:

  1. HttpOnly(一项标准,浏览器将禁止页面的 Javascript 访问带有 HttpOnly 属性的cookie)
  2. 输入检查(用户的输入都需要做安全检查和过滤,做必要的转码再存储)
  3. 输出检查(服务器的输出也要做安全转换,防止输出恶意脚本代码)

CSRF简介

CSRF(Cross-Site Request Forgery),即跨站请求伪造,也叫one click attack / session riding,缩写为CSRF/XSRF。是一种劫持受信任用户向服务器发送恶意请求的攻击方式。

简单说就是:攻击者可以盗用你的登录信息,以你的身份模拟发送各种请求。

通常情况下,CSRF 攻击是攻击者借助受害者的 cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行需要有权限才能访问的资源。要实现CSRF攻击,受害者必须依次完成下面两个步骤:

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

而上面两点经常存在,比如这些原因:

  1. 你不能保证你登录网站A后,不再打开一个Tab页面并访问另外的网站B,现代浏览器都是支持多Tab的
  2. 关闭了A的Tab页,而不是从A退出登录,如果没有关闭浏览器,那么网站A其实一直都是登录状态
  3. 产生攻击的网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站

所以对普通用户来说,很难避免在登录一个网站之后不点击其他链接进行一些操作,上网的时候随时可能成为CSRF的受害者。CSRF攻击主要是因为Web的隐式身份验证机制,Web的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。

image-20201124180106636

防范CSRF攻击:

  • 合理使用GET、POST和Cookie
  • 验证码(每次请求加入验证码,麻烦不现实)
  • Referer Check(检查请求来源,是否来自非预期网站)
  • Token 验证(后台要求每次请求都传入Token,验证登录合法性)

XSS 和 SCRF 的区别

XSS:不需要登录,是向网站 A 注入脚本,然后执行脚本中的代码,盗用cookie破坏页面的正常结构,插入广告等恶意内容,DDoss攻击等。

CSRF:是利用网站A本身的漏洞,去请求网站A的API,需要被攻击者先登录A,并不一定需要获取用户在A站中的cookie等信息,只要能伪造认证用户的请求就行。当然CSRF也可以利用XSS获取SessionID等信息之后,主动伪造攻击。

几点思考

其一:我发现数据过滤在Web安全中起到一个基石的作用,大多数的安全问题都是由于没有过滤数据和验证数据引起的,CSRF攻击,XSS攻击、SQL注入等都是没有认真过滤数据引起的,因此我们需要特别重视输入输出数据的过滤编码等工作。WEB开发框架要集成相应的处理规范。

其二:有没有发现很多攻击都是利用cookie的特性,因此能不用cookie尽量不用。以后我将会分享一套完全不用cookie的单点登录方案。

其三:现在浏览器中有一项安全策略,这就是"网页安全政策"(Content Security Policy,缩写 CSP),参考阮一峰老师的博客:http://www.ruanyifeng.com/blog/2016/09/csp.html

(完)