zoukankan      html  css  js  c++  java
  • XSS攻击-原理学习

    本文优先发布于简书https://www.jianshu.com/p/04e0f8971890

    1、百度百科
    XSS,跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,通常将跨站脚本攻击缩写为XSS。
    XSS攻击,通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
    这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。
    攻击成功后,攻击者可能得到包括但不限于更
    高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
    参考:[百度百科](https://baike.baidu.com/item/XSS%E6%94%BB%E5%87%BB/954065?fr=aladdin)
    ***
    2、攻击条件
    1)向web页面注入恶意代码;
    2)这些恶意代码能够被浏览器成功的执行
    ***
    3、XSS攻击类型
    1)反射型XSS(非持久型跨站):反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
    这类通常使用URL,具体流程:
    ①攻击者构造出特殊的 URL,其中包含恶意代码。
    ②用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
    ③恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在用户电脑上。
    ④用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
    ⑤恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
    反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。
    反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。
    由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。
    POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见。
    示例:
    ①`http://xxx/xsstest?key=<script>alert("XSS")</script>`
    ②`http://xxx/xsstest?key=<img src='w.123' onerror='alert("XSS")'>`
    ③`http://xxx/xsstest?key=<a onclick='alert("XSS")'>点我</a>`
    2)存储型XSS(持久型跨站):最直接的危害类型,跨站代码存储在服务器(数据库)
    攻击流程:
    ①攻击者构造出特殊的 URL,其中包含恶意代码。
    ②用户打开带有恶意代码的 URL。
    ③用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
    ④恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
    DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
    示例:
    ①窃取用户信息,如cookie,token,账号密码等。
    `<script>alert("xss")</script>`
    ②生成一些恶意图片,文字,用户点击图片或文字,跳转至相应目标网站
    `<img onclick="window.location.href='http://xxx.com'" width='300' src='img/testxss.jpg'/>`
    ③劫持流量实现恶意跳转
    `<script>window.location.href="http://xxx.com";</script>`
    3)DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
    攻击流程:
    ①攻击者构造出特殊的 URL,其中包含恶意代码。
    ②用户打开带有恶意代码的 URL。
    ③用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
    ④恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
    DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
    参考:
    [网络攻击-XSS攻击详解](https://www.cnblogs.com/mao2080/p/9460397.html)
    [web安全之XSS攻击](https://www.cnblogs.com/stefanieszx11/p/8602138.html)
    [前端安全系列(一):如何防止XSS攻击?](https://www.freebuf.com/articles/web/185654.html)
    ***
    4、漏洞总结
    ①在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
    ②在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
    ③在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
    ④在标签的 href、src 等属性中,包含 javascript: 等可执行代码。
    ⑤在 onload、onerror、onclick 等事件中,注入不受控制代码。
    ⑥在 style 属性和标签中,包含类似 background-image:url("javascript:…"); 的代码(新版本浏览器已经可以防范)。
    ⑦在 style 属性和标签中,包含类似 expression(…) 的 CSS 表达式代码(新版本浏览器已经可以防范)。
    5、防御规则
    1)不要在允许位置插入不可信数据
    2)在向HTML元素内容插入不可信数据前对HTML解码
    3)在向HTML常见属性插入不可信数据前进行属性解码
    4)在向HTML JavaScript DATA Values插入不可信数据前,进行JavaScript解码
    5)在向HTML样式属性插入不可信数据前,进行CSS解码
    6)在向HTML URL属性插入不可信数据前,进行URL解码
    ***
    5、防御攻击方法
    ①验证所有输入数据,有效监测攻击;
    ②对所有输出数据进行适当编码,防止任何已成功注入的脚本在浏览器端运行;
    ③输入长度做限制(对于不受信任的输入,都应该限定一个合理的长度。虽然无法完全防止 XSS 发生,但可以增加 XSS 攻击的难度);
    ④禁止加载外域代码,防止复杂的攻击逻辑;
    ⑤禁止外域提交,网站被攻击后,用户的数据不会泄露到外域;
    ⑥禁止内联脚本执行(规则较严格,目前发现 GitHub 使用);
    ⑦禁止未授权的脚本执行(新特性,Google Map 移动版在使用);
    ⑧合理使用上报可以及时发现 XSS,利于尽快修复问题;
    ⑨禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。

  • 相关阅读:
    最长公共子序列
    小测试 炒书
    洛谷P1968 美元汇率
    洛谷P3611 [USACO17JAN]Cow Dance Show奶牛舞蹈
    【刷题】【树】【模拟】树网的核
    【刷题】【dp】地精的贸易
    【刷题】【模拟】复制cs
    【刷题】【模拟】3n+1
    【刷题】【dp】中国象棋
    【刷题】【搜索】新数独
  • 原文地址:https://www.cnblogs.com/nayli-blogs/p/11588783.html
Copyright © 2011-2022 走看看