zoukankan      html  css  js  c++  java
  • OWASP要素增强Web应用程序安全(3) java程序员

     跨站点脚本是Web程序很常见的漏洞,不论是个人用户还是商业用户,都会由于这种漏洞而遭受攻击。这里我们将详细介绍跨站点脚本的脆弱性,以及由此使得个人用户和企业用户所面临的风险。最后还会介绍如何消除或者抵御这类攻击。

    我们将着重介绍Web应用程序中最大的脆弱性领域――跨站点脚本(XSS)。XSS的脆弱性由来已久,然而,随着越来越多的蠕虫和病毒利用这一脆弱性进行破坏活动,企业系统中与XSS相关的安全风险也越来越明显。

    什么是XSS?

    XSS漏洞一般出现在可以注入代码的Web程序中。利用这一漏洞的脚本可能来自服务器,但是并不在服务器上执行,而是在客户端的工作站上执行。目前有三种基本的XSS漏洞攻击:映射,存储和基于DOM(文档对象模块)

    其中反射攻击最为常见。这类漏洞经常出现在网页中可以动态输入内容并返回结果的区域。搜索页面就是一个很典型的例子。当攻击者发现了存在这一漏洞的网页,他只需要将脚本输入文本框。当页面重新显示整段文字时,脚本便被执行了。

    在很多情况下,黑客通过一些社会学工程来引诱用户点击经过特殊处理的链结 ,从而导致攻击发生。这种方式可以让黑客将脚本注入到网页中。(Jeremiah Grossman, "Cross-site Scripting Worms and Viruses," April 2006)

    存储型弱点正如其名字所表示的意思。攻击者将恶意代码提交到有XSS漏洞的网站,或者网站的某个经常被用户访问的部分。比如一些社会网站以及用户提交评论的页面。当受害者打开相应的页面时,恶意脚本就会在用户不知情的情况下自动执行。因为浏览器认为这个存储型恶意脚本是来自受信的Web网站或服务器的。

    以下是一个非常简单的存储型脚本攻击的例子。

    脚本一般会插入到表单中,这在很多论坛或者拥有大量用户的服务器上很常见。比如黑客会将以下代码通过正常的发贴方式上传到在线论坛:

    <script>alert('Hello World')</script>

    当不知情的用户打开这个帖子,代码就会在用户的电脑上执行。虽然我给出的这段代码没有任何有害的内容,但是如果代码中包含了以下内容,就不那么乐观了:

    ◆显示许可权限错误信息
    ◆提示用户输入密码
    ◆将用户的密码通过邮件发送到黑客设定的服务器上

    最后一种XSS弱点是基于DOM的攻击。作为AJAX的一部分,DOM是一种:

    “让程序员可以访问和控制Web页面文档内容的接口。它提供了一种结构化的面向对象的方法,可以对页面中特定的内容进行检索以及设定对象的属性。” (Mike Hall, "Introduction to the Document Object Model," 2007).

    在客户端的脚本中,存在DOM漏洞。一般来说这出现在脚本模块访问URL需要参数的时候。如果脚本使用的参数信息没有经过编码或过滤就写入到了HTML文件中,那么很有可能会存在XSS漏洞。有关这方面的例子和更详细的说明,可以参考2005年Amit Klein的文章"DOM Based Cross Site Scripting or XSS of the Third Kind,"基于DOM的XSS攻击难以防御。因为DOM页面层中的所有方法都是受信的,植入在参数中的恶意代码可以和其他代码一样被执行。与存储型XSS攻击一样,DOM脚本攻击的防御还是要依靠程序员在编程时的细心和安全意识。

    商业冲击

    根据Grossman的观点,当攻击者成功利用XSS漏洞进行攻击后,可能进一步实施以下工作:

    ◆强制发送电子邮件信息
    ◆转移资本
    ◆删除或修改数据
    ◆使用被害人的电脑攻击其他服务器
    ◆下载非法内容

    基本上说,Web网页脚本所能做的工作,黑客都可以通过成功的XSS攻击而实施。

    预防XSS攻击

    由于很多Web应用程序都包含有漏洞,因此最好的预防XSS攻击的方式就是检测输入内容的合法性。比如,确保输入内容中不包括尖括号。这看上去很简单,但确是防御XSS攻击一个非常有效的手段。根据McClure, Scambray, 以及 Kurtz的说法:

     “我们遇到的几乎所有的XSS攻击都没有对输入内容的尖括号进行屏蔽或者重新编码” (Hacking Exposed, p. 565) 。

    但是这并不仅仅是尖括号的问题。任何语法符号都不应该被允许。语法符号可能是来自数据库,或其他服务器。输入Web应用程序的任何内容必须经过过滤,确保用户最终看到的是单纯的文本内容。

    企业应对XSS攻击的方式还包括:

    1.教育员工在点击电子邮件中的链结或即时消息中的链结时,要特别小心。
    2.建立互联网接入控制策略,限制企业员工访问高风险网站(比如成人网站以及盗版媒体网站) 以及未知风险的网站。
    3.确保用户的电脑上都安装了最新版的防火墙软件和反病毒软件。设置防火墙限制流出的数据。
    4.确保所有敏感功能不会通过机器人或者第三方服务器来启动。 (Grossman).
    5.手动或自动进行代码扫描,主动发现潜在的XSS漏洞。

    总结

    XSS漏洞会给企业网络带来严重的安全风险。企业的敏感数据很可能由于XSS漏洞被泄露出去。正如我们上面介绍的,预防XSS攻击,需要企业终端用户以及程序员的协同努力,通过良好的技术方案抵御这种人为危害。

  • 相关阅读:
    UVa OJ 148 Anagram checker (回文构词检测)
    UVa OJ 134 LoglanA Logical Language (Loglan逻辑语言)
    平面内两条线段的位置关系(相交)判定与交点求解
    UVa OJ 130 Roman Roulette (罗马轮盘赌)
    UVa OJ 135 No Rectangles (没有矩形)
    混合函数继承方式构造函数
    html5基础(第一天)
    js中substr,substring,indexOf,lastIndexOf,split等的用法
    css的textindent属性实现段落第一行缩进
    普通的css普通的描边字
  • 原文地址:https://www.cnblogs.com/java20130725/p/3216027.html
Copyright © 2011-2022 走看看