第二章-前端基础

第二章-前端基础

内容纲要

2.1 W3C标准

HTML
XML
JAVASCRIPT
CSS

因为制订了标准,所以Web才标准而互相兼容。

Hack主要针对不兼容问题,如CSS Reset 、JS框架’

2.2 URL

通过 URL 请求可以查找到唯一的资源,格式如下:
:///?#
比如:
http://www.foo.com/path/f.php?id=1&type=cool#new
对应关系是:
- - http
- - www.foo.com
- - /path/f.php
- - id=1&type=cool,包括<参数名=参数值>对
- - new

对于需要 HTTP Basic 认证的 URL 请求,甚至可以将用户名与密码直接放入 URL 中,在之前,格式如:
http://username:password@www.foo.com/

URL 编码方式(重点),有三类: escape、 encodeURI、 encodeURIComponent,
对应的解码函数是: unescape、 decodeURI、 decodeURIComponent。这三个编码函数是有差
异的,甚至浏览器在自动 URL 编码中也存在差异。

2.3 HTTP协议

主要还是HTTP协议头各部分所代表的含义及其分析。

2.4 HTML

HTML 是由众多标签组成的,标签内还有对应的各种属性。这些标签可以不区分大小写,有的可以不需要闭合属性的值可以用单引号、双引号、反单引号包围住甚至不需要引号多余的空格与 Tab 毫不影响 HTML的解析HTML 里可以内嵌 CSS、 JavaScript 等内容,而不强调分离,等等。

DOM树

其实 HTML 文档就是一个 DOM 树。

很多数据都存在DOM树中。

iframe 内嵌

可嵌入第三方内容,所以易出现安全性问题。

HTML内嵌脚本执行

JavaScript 脚本除了出现在 JS 格式文件里,被嵌入而执行外,还可以出现在 HTML 的标签内、 HTML 的标签 on 事件中,以及一些标签的 href、 src **等属性的伪协议( **javascript:等)中。
导致防御 XSS 变得有些棘手,出现在 DOM 树的不同位置,面对的防御方案都不太一样。这也为攻击者提供了很大便利,能够执行 JavaScript 的位置越多,意味着 XSS 发生的面也越广, XSS 漏洞出现的可能性也越大。

2.5 JavaScript--跨站之魂

1. DOM树操作

  • 获取HTML内容中的隐私数据:
    document.getElementById('private_msg').innerHTML;
  • 获取浏览器的Cookies数据 : 通过document.cooike可获取到
  • 获取URL地址中的数据: 通window.location或location处可以获取URL地址中的数据

2. AJAX风险

Asynchronous JavaScript And XML
异步的JavaScript与XML

3.模拟用户发起浏览器请求 (也是爬虫的原理)

基本上都是通过HTTP的POSTGET
对于GET,基本上就是一个URL
这个原理是相通的,通过 JavaScript 动态创建 iframe/frame/script/link 等标签对象,然
后将它们的 src 或 href 属性指向目标地址即可。

4.Cookie安全

Cookie重要字段
[name][value][domain][path][expires][httponly][secure]
名称、值、所属域名、所属相对根路径、过期时间、是否有 HttpOnly 标志、是否有 Secure 标志。

  • 子域Cookie机制
    domain字段的机制,设置Cookie时,如果不指定domain的值,默认就是本域。
  • 路径Cookie机制
    设置Cookie时,如果不指定path的值,默认就是目标页面的路径。
    通过设置 path 不能防止重要的 Cookie 被盗取。
  • HttpOnly Cookie机制
    HttpOnly 是指仅在 HTTP 层面上传输的 Cookie,当设置了 HttpOnly 标志后,
    客户端脚本就无法读写该 Cookie,这样能有效地防御 XSS攻击获取 Cookie。
    CVE-2012-0053漏洞关于Apache Http Server 400错误暴露HttpOnly Cookie
  • Secure Cookie机制
    设置了 Secure 标志的 Cookie 仅在 HTTPS 层面上安全传输,如果请求是 HTTP 的,就不会带上这个 Cookie,这样能降低重要的 Cookie 被中间人截获的风险。
    而Secure Cookie 对于客户端脚本来说是可读写的。可读意味着Secure Cookie 能被盗取,可写意味着能被篡改。如下的 JavaScript 代码可对已知的 SecureCookie 进行篡改:
    ```javascript
    // path 与 domain 必须一致,否则会被认为是不同的 Cookie
    document.cookie="test_secure=hijack;path=/;secure;"</li>
    </ul><pre class="line-numbers prism-highlight" data-start="1"><code class="language-null">- 本地Cookie与内存Cookie
    它与过期时间( Cookie 的 expires 字段)紧密相关。如果没设置过期时间,就是内存 Cookie,这样的 Cookie 会随着浏览器的关闭而从内存中消失;如果设置了过期时间是未来的某个时间点,那么这样的 Cookie 就会以文本形式保存在操作系统本地,待过期时间到了才会消失。
    为了提升用户体验,不需要每次都登录,可采用本地 Cookie 的方式让用户在未来 1 个月、半年、永久等时间段内都不需要进行登录操作。
    ```javascript
    document.cookie="test_expires=1; expires=Mon, 01 Jan 2112 00:00:00 GMT;

    又一次证明安全性与实用性不可得兼
    - Cookie的P3P性质
    HTTP 响应头的 P3P( Platform for Privacy Preferences Project)字段是 W3C 公布的一项隐私保护推荐标准。该字段用于标识是否允许目标网站的 Cookie 被另一个域通过加载目标网站而设置或发送,仅 IE 执行了该策略。

    5.本地存储风险

    本地存储的主要风险是被植入广告跟踪标志,有的想删都不一定能删除干净。
    evercookie即使用多种储存方式,除上述还有以下:
    - Silverlight 的 IsolatedStorage,类似 Flash Cookie。
    - PNG Cache,将 Cookie 转换成 RGB 值描述形式,以 PNG Cache 方式强制缓存着,
    读入则以 HTML5 的 canvas 对象读取并还原为原来的 Cookie 值。
    - 类似 PNG Cache 机制的还有 HTTP Etags、 Web Cache,这三种本质上都是利用了浏
    览器缓存机制:浏览器会优先从本地读取缓存的内容。
    - Web History,利用的是“ CSS 判断目标 URL 是否访问过”技巧,属于一种过时的
    技巧。
    - window.name,本质就是一个 DOM 存储,并不存在本地。
    evercookie 使用了 10 多种存储方式,互相配合,如果哪个存储被删除,再次请求evercookie 页面时,被删除的值会被恢复。这就evercookie 的目的:永久性 Cookie

    存储特性
    - Cookie: 删除 Cookie 时,仅需设置过期值为过去的时间即可。 Cookie 无法跨浏览器存在
    - userData:一种持久化用户数据的概念。只有IE支持。
    - localStorage
    本地存储。
    无法跨浏览器储存
    - Flash Cookie

    6.E4X(ECMAScript For XML)

    两大脚本 JavaScript 和 ActionScript 都遵循 ECMAScript 标准,所以在 E4X 的语法上是一致的。
    对于 JavaScript 来说,当前只有 Firefox支持 E4X,这种技术是将 XML 作为 JavaScript 的对象。

    通过E4X技术,可以混淆JavaScript代码。

    7.JavaScript函数劫持

    JavaScript 函数劫持很简单, 一般情况下,只要在目标函数触发之前,重写这个函数即可,比如,劫持 eval 函数。
    函数劫持:在一定程度上可以自动化分析 DOM XSS ,可以动态解密一些混淆的代码(如:网马), JSON HiJacking 使用的就是这样的技巧。

    2.6CSS

    层叠样式表,控制网页所呈现的样式,运用CSS技巧,攻击者可以伪装出期望的网页效果,从而进行钓鱼攻击。
    CSS可利用性质:

    1.CSS容错性

    2.样式伪装

    3.CSS伪类

    4.CSS3的属性选择符

    2.7 ActionScript

    ActionScript 由 Flash的脚本虚拟机执行,运行环境就在 Flash Player 中,而 Flash Player 的运行环境主要有两个:浏览器与操作系统本地, Flash 有自己的安全沙箱来限制 ActionScript 的能力,否则通过ActionScript 可以进行很多危险的操作,即所谓的恶意 Flash

    1.Falsh安全沙箱

    包括远程沙箱和本地沙箱。沙箱模型类似于浏览器中的同源策略,在同一域内的资源会被放到一个安全组下,这个安全组称之为安全沙箱。

    Flash Player权限控制

    1. 管理用户权限:指系统的最高权限,即Windows下的Administrator、Linux下的root等,它们有如下两种类型的控制:
      • mms.cfg文件:数据加载、隐私控制、 Flash Player 更新、旧版文件支持、本地文件安全性、全屏模式等。
      • “全局 Flash Player 信任”目录
    2. 用户控制
    3. Web站点控制(跨域策略文件)
      crossdomain.xml

    4. 开发人员控制
      开发人员可以通过编码指定允许的安全控制权限。

    安全沙箱

    • 远程沙箱:控制远程域上浏览器环境中的安全策略
    • 本地沙箱:Falsh可在桌面环境下运行,因此需要一个安全策略来限制ActionScript。

    HTML嵌入Flash的安全相关配置

    标签属性:
    - allowNetworking:控制Flash文件的网络访问功能
    - allowScriptAccess:与JavaScript通信的安全控制
    - allowFullScreen:全面模式的安全问题,是一个Boolean值,默认为False,不允许Falsh全屏。所带来的类似于界面伪装这类攻击。

    跨站Flash

    也称XSF(Cross Site Flash),即通过ActionScript来加载第三方Flash文件进行攻击。

    参数传递

    • AS2 的_root.argv 形式, argv 直接就是参数名;
    • AS3 的 root.loaderInfo.parameters 形式,返回参数键值的字典结构。
    • 外部XML形式。

    Flash里的内嵌HTML

    可内嵌HTML中可利用的标签:
    - : 仅支持target与herf属性。herf属性:
    支持JavaScript伪协议;AS2支持asfunction伪协议,可以调用AS函数,如getURL等;AS3支持event:事件协议,需要设置监听点击事件。
    - :曾经支持JavaScript伪协议;无论AS2还是AS3,都支持直接嵌入swf文件解析,与跨站Flash相似。

    与JavaScript通信

    • getURL()与navigate ToURL()
    • Externallnterface:专门为Flash与JavaScript通信准备的接口。是一个对象。

    网络通信

    • URLLoader和URLRequest组合进行文本数据的请求。
    • socket请求,可使用Socket类或XMLSocket
    • AMF :flash和服务器端通信常用的一种二进制编码模式,传输效率高,可以在HTTP层面进行传输。

harmoc

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注