zoukankan      html  css  js  c++  java
  • XSS

    XSS:当你“被发送”了一条微博时,到底发生了什么?

    我们所谈论的 Web,是指所有基于 HTTP 或者其他超文本传输协议(RPC 等)开发的应用,包括:网页、App、API 接口等等。这类应用的共同点是:通过 HTTP 等文本协议,在客户端和服务端之间进行数据交换。客户端需要将服务端传出的数据展示渲染出来,服务端需要将客户端传入的数据进行对应的处理。而 Web 安全所涉及的正是这些应用中存在的各类安全问题。

    XSS 攻击是如何产生的?

    通过给定异常的输入,黑客可以在你的浏览器中,插入一段恶意的 JavaScript 脚本,从而窃取你的隐私信息或者仿冒你进行操作。这就是 XSS 攻击(Cross-Site Scripting,跨站脚本攻击)的原理。

    1. 反射型 XSS

    黑客诱导你点击了某个链接,这个链接提供的服务,可能就是上述的搜索功能。网页在解析到链接的参数后,执行正常的搜索逻辑,但是因为漏洞,网页中被填入了黑客定义的脚本。使得用户的浏览器,最终执行的是黑客的脚本。

    1. 基于 DOM 的 XSS

    HTML 是通过 JavaScript 脚本修改DOM来实现这个功能的。

    1. 持久型 XSS

    持久型 XSS 往往具备更强的危害性。因为对于一个反射型或者基于 DOM 的 XSS 来说,需要黑客诱导用户点击恶意的 URL,才能够成功地在用户浏览器上执行 JavaScript 脚本。这对黑客在诱导用户操作方面的能力提出了考验:并不是所有的用户都是小白,一些有经验的用户会在点击链接前进行一定的考虑。

    而持久型 XSS 则不同,它是将恶意的 JavaScript 脚本写入到了正常的服务端数据库中,因此,只要用户正常的使用业务功能,就会被注入 JavaScript 脚本。所以说,持久型 XSS 在传播速度和传播范围上,会远远超出其他类型的 XSS。

    通过 XSS 攻击,黑客能做什么?

    1. 窃取 Cookie

    黑客注入的 JavaScript 代码是运行在 server.com 这个域名下的,因此,黑客可以在 JavaScript 中通过 document.cookie 获得 Cookie 信息。

    1. 未授权操作

    除了窃取敏感信息以外,黑客还可以利用 JavaScript 的特性,直接代替用户在 HTML 进行各类操作。

    1. 按键记录和钓鱼

    JavaScript 的功能十分强大,它还能够记录用户在浏览器中的大部分操作。比如:鼠标的轨迹、键盘输入的信息等。

    如何进行 XSS 防护?

    1. 验证输入 OR 验证输出

    防护的核心原则是:一切用户输入皆不可信

    (1) 你将无法保存用户的原始输入信息。

    (2) 用户的内容可能会被多种语言获取和使用,提前编码或者处理,将产生未知的问题。

    因此,我更推荐在需要输出的时候去进行验证,即当需要展示的时候,我们再对内容进行验证,这样我们就能够根据不同的环境去采取不同的保护方案了。

    1. 编码

    XSS 防护的核心原则就是验证

    编码,就是将部分浏览器识别的关键词进行转换(比如 < 和 >),从而避免浏览器产生误解。

    1. 检测和过滤

    在检测中,推荐使用白名单的规则。因为白名单的规则比较简单,并且十分有效。比如,在只输入一个分数的地方,规定只有整型变量是合法的。这样一来,你就能够检测出 99.99% 的攻击行为了。

    4.CSP

    CSP,就是在服务端返回的 HTTP header 里面添加一个 Content-Security-Policy 选项,然后定义资源的白名单域名。浏览器就会识别这个字段,并限制对非白名单资源的访问。

    CSP 还是受到了大部分浏览器支持的,只要用户使用的是最新的浏览器,基本都能够得到很好的保护。

    总结

    简单来说,XSS 就是利用 Web 漏洞,在用户的浏览器中执行黑客定义的 JavaScript 脚本,这样一种攻击方式。根据攻击方式的不同,可以分为:反射型 XSS、基于 DOM 的 XSS 和持久型 XSS。通过在用户的浏览器中注入脚本,黑客可以通过各种方式,采集到用户的敏感信息,包括:Cookie、按键记录、密码等。

    预防 XSS 主要通过对用户内容的验证来完成。首先,我推荐在需要展示用户内容的时候去进行验证,而不是当用户输入的时候就去验证。在验证过程中,我们优先采用编码的方式来完成。如果编码影响到了业务的正常功能,我们就可以采用白名单的检测和过滤方式来进行验证。除此之外,我们可以根据业务需要,配置合适的 CSP 规则,这也能在很大程度上降低 XSS 产生的影响。

  • 相关阅读:
    select和epoll的区别
    Epoll导致的selector空轮询
    2.集合框架中的泛型有什么优点?
    java的语法基础(二)
    17-文本属性和字体属性
    15-浮动
    16-margin的用法
    14-块级元素和行内元素
    12-简单认识下margin
    day15 什么是递归/递归与回溯
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/12683672.html
Copyright © 2011-2022 走看看