跨站脚本攻击(XSS)是web应用程序中最危险和最常见的安全漏洞之一。安全研究人员发现这个漏洞在最受欢迎的网站,包括谷歌、Facebook、亚马逊、PayPal,和许多其他网站。如果你看看bug赏金计划,大多数报告的问题属于 XSS。为了防止跨站脚本攻击,浏览器也有自己的过滤器,但安全研究人员总是想方设法绕过这些过滤器。这个漏洞是通常用于执行cookie窃取、恶意软件传播,会话劫持,恶意重定向。在这种攻击中,攻击者将恶意JavaScript代码到网站,这样由攻击者在脚本中执行的操作。该漏洞是容易找到但很难修补。这就是为什么它可以发现在任何网站如果你尝试。
在这篇文章,我们会看到什么跨站脚本攻击是和如何创建一个筛选器来防止它。我们还将看到几个开放源码库,将帮助您在您的 web 应用程序中的跨站点脚本漏洞修补。
什么是跨站脚本攻击?
跨站点脚本攻击是攻击者尝试注入恶意的脚本在受信任的网站上执行恶意操作的一种攻击方法。在跨站脚本攻击中,恶意代码在浏览器端上执行对用户影响。跨站点脚本也称为是 XSS 攻击。第一个问题是记住的是为什么我们称之为“XSS”而不是“CSS。答案很简单,知道谁在web开发工作的人。在网页设计中,我们有级联样式表CSS。所以跨站点脚本被称为 XSS,所以它不会不混乱CSS。
现在,回到 XSS。当 web 应用程序中执行一个脚本,攻击者提供给用户,就会发生跨站脚本攻击。这个缺陷可以在一个应用程序任何地方发现,用户输入了不正确的编码。。如果输入不正确编码并过滤,这种注入恶意脚本将发送给用户。一个浏览器没办法知道它不应该相信一个脚本。当浏览器执行的脚本时,在客户端上执行恶意操作。大多数时间,XSS 用来窃取 cookie 和执行会话劫持偷取有效用户会话令牌。
XSS 的几个例子:
示例 1
你几乎在所有的网站上看到了一个搜索框。在此搜索框中,您可以搜索到网站上任何可用的东西。这个搜索表单看起来这样
<form action=”search.php” method=”get”>
<input type=”text” name=”q” value=”" />
<input type=”submit” value=”send” />
</form>
在php网页上显示的搜索结果,同时它也列出了在“关键字”的搜索结果。
web页面上,它通常编码如下:
<h3>You Searched for: <!–?php echo($_GET['q']) ?–>
不管一个人搜索什么,它将显示搜索结果在网页上。现在想想如果一个攻击者尝试注入恶意脚本,这边会发生什么。
搜索
“><script>alert(‘XSS injection’)</script>
如果 web 应用程序中没有对输入编码和过滤恶意脚本,它将会输入,当被访问时,它将被调用输出到网页上。所以,在关键字的地方,它类似于:
<h3> You Searched for: “><script>alert(‘XSS injection’)</script>
它将由浏览器执行,将显示一个警告框,提示”XSS 注入”。
示例 2
假设有一个网站有消息传递功能。在这个网站上,用户可以发送邮件到他们的联系人。基本表单将会看起来像这样:
<form action=”sendmessage.php” method=”post’”>
<textarea name=”message”> </textarea>
<input type=”submit” value=”send” />
</form>
当提交此表单时,该邮件将会存储在数据库中。他从收件箱打开邮件时,另一人将看到消息。假设攻击者已经在消息中发送一些 cookie 窃取的脚本。此脚本将作为一条消息存储在网站上。当别人试图读取消息时,将执行该 脚本窃取cookie 和他会话 id ,现在是攻击者的一面。用一个有效的会话 id,攻击者可以劫持其他人的帐户。
跨站脚本攻击的类型
没有标准的分类,但大部分专家将XSS分为 三种类型: 非持久性 XSS、 持久性 XSS 和基于 DOM 的 XSS。
非持久性跨站脚本攻击
非持久性 XSS 也称为是反射跨站漏洞。它是最常见的 XSS 类型。在这,注入数据反射给攻击者。如果你看看我们有上面的例子,第一个 XSS 列子是非持续的攻击。典型的非持久性 XSS 包含与 XSS 的链接。
持久性跨站脚本攻击(存储性)
持久性跨站脚本是存储跨站点脚本。当它发生时 XSS 变量存储在网站的数据库,每当用户打开网页时执行。每次用户打开浏览器,脚本执行。在上述示例中,网站消息的第二个例子是持久的 XSS 攻击。持久性 XSS 比非持久性 XSS更有害,因为每当用户打开要查看的内容的网页时,将自动执行该脚本。谷歌的 orkut 是脆弱的持久性 xss 攻击,破坏网站名誉。
基于DOM的跨站脚本攻击
基于 DOM 的 XSS 有时也称为”type-0 XSS”。它发生时, XSS 变量执行由 DOM 修改用户的浏览器网页的结果。在客户端的 HTTP 响应不会更改,但以恶意的方式执行的脚本。这这是最先进和最知名的type-0 XSS。大多数情况下,这个漏洞之所以存在是因为开发商不了解它是如何工作。
跨站脚本攻击出现的原因
跨站脚本攻击的主要原因是用户对开发商的信任。开发者很容易认为用户将不会执行什么错误,所以他们创建应用程序而无需使用任何额外的努力,阻止用户输入任何恶意活动。另一个原因是,这种攻击有许多变种。有时,正确地尝试过滤任何恶意脚本的应用程序获取混淆,并允许脚本。在过去的几个月里,我们已经看到了许多种不同的XSS的变体,可以绕过大部分可用的XSS过滤器。
所以我们不能说一个网站是完全保护。但我们可以尽力过滤大部分的事情,因为特别的变量主要来自负责安全的人员,他们也会帮助你,修补并使你的过滤器更智能。
如何创造一个良好的XSS过滤器阻止大部分XSS Vectors
在我们开始创建一个XSS过滤之前,我想说一件重要的事情:我们不要求有一个完善的XSS过滤器。研究人员一直觉得奇怪的方法来绕过过滤器。但我们可以努力使一个过滤器,可以过滤容易和著名的XSS vectors。至少你将成为安全的脚本小子。
如果你没有理解你不能修补的XSS。你应该有一个想法,攻击者注入脚本。你应该有XSS vectors知识。
让我们从基本的过滤器:
有一个简单的规则您需要遵循:编码用户指定的每个数据。如果数据不是用户指定的但通过 GET 参数提供,编码这些数据。即使表单可以包含xss vectors。所以,每次你要在网站上使用一个变量的值,请尝试清除XSS。
这些都是在您的网站在使用之前必须被正确过滤的主要数据。
URL
HTTP引用对象
从表单中获取参数
表单 POST 的参数
window.location
document.referrer
document.location
document.url
document.urlunencoded
cookie数据
标题数据
数据库中的数据,如果没有正确地验证用户的输入
首先,对所有的 <>,进行编码。这应该是您的 XSS 过滤的第一步。请参见编码如下:
& –> &
< –> <
> –> >
” –> "
‘ –> '
/ –> /
为此,您可以在 PHP 中使用htmlspecialchars()函数。所有 HTML 标记和特殊字符,然后对它进行都编码。
$input = htmlspecialchars($input, ENT_QUOTES);
如果 $input was= “><script>alert(1)</script>
此函数将转换它"><script>prompt(1)</script>
通过解码它在某个地方使用的编码值时,还可以帮助这行:
$input = str_replace(array(‘&’,’<’,’>’), array(‘&amp;’,’&lt;’,’&gt;’), $input);
一个变量可以使用 HTML 字符,所以你应该也来过滤这些。添加此规则:
$input= preg_replace(‘/(&#*\w+)[\x00-\x20]+;/u’, ‘$1;’, $data);
$data = preg_replace(‘/(&#x*[0-9A-F]+);*/iu’, ‘$1;’, $input);
但仅靠这些是不会帮你的。有很多地方的输入不需要脚本标签。攻击者可以注入一些事件的函数来执行脚本。有许多方法,攻击者可以绕过这个过滤器。因此,我们需要考虑所有的可能性,并添加一些其他的东西,使滤波器增强。不只是JavaScript,你也需要摆脱串联样式表和XML数据以防止XSS。
此外上 OWASP 可用来防止 XSS 的完整详细的指南。这里你可以阅读它。
开放源码库,用于防止 XSS 攻击
PHP AntiXSS
这是一个不错的 PHP 库,可以帮助开发人员从跨站脚本漏洞添加额外的一层保护。它会自动检测编码,必须经过过滤的数据编码。库的使用是很容易的。你可以阅读更多关于它在这里: https://code.google.com/p/php-antixss/
xss_clean.php filter
这是一个强的XSS过滤器,清除各种URF编码和嵌套的利用。开发人员在分析了各种来源之后建功能。这种编码的功能是可以免费从GitHub。请看这里:https://gist.github.com/mbijon/1098477
HTML Purifier
这是一个标准的HTML过滤库编写的PHP。这将删除所有恶意代码的输入和防止XSS攻击网站。它也是作为大多数 PHP 框架的插件用。
在这里阅读更多关于HTML器:http://htmlpurifier.org/
xssprotect
xssprotect 是另一个很好的库,给开发者提供了一个方法来清除XSS攻击 vectors。此库的工作原理通过创建网页的 HTML 标签树。然后它将分析页面相匹配的所有标记。之后,它要求过滤器接口来过滤不当的 HTML 属性和 XSS 攻击。此库是 Java 编写的。
阅读更多关于此库:https://code.google.com/p/xssprotect/
XSS HTML Filter
这是Java的另一个XSS过滤器。这是一个简单的实用工具,可以用来正确的跨站脚本和恶意的 HTML 代码注入的用户输入。
分享到:
相关推荐
XSS(跨站脚本攻击):反射型XSS、存储型XSS、DOM XSS CSRF(跨站请求伪造) SSRF(服务器端请求伪造) 文件上传下载:富文本编辑器 弱口令: X-Scan、Brutus、Hydra、溯雪等工具 其它漏洞: 4、逻辑漏洞(3天) ...
智能家居的概念早在很久以前就已经存在,但随着硬件成本的下降以及Google收购Nest等事件的发生,智能家居的热度逐渐升高。现在,我们的智能家居系统已经基本实现了整体架构,包括服务器端、Web网页、Android手机...
Active Server Pages 简介 Active Server Pages(ASP)使生成 Web ...关于编写 ASP 脚本基本概念的信息。 关于编写执行基本任务脚本的信息。 关于编写其他高级脚本的信息。 ASP 对象和组件以及脚本语言的参考页。
Active Server Pages(ASP)使生成 Web 动态...关于编写 ASP 脚本基本概念的信息。 关于编写执行基本任务脚本的信息。 关于编写其他高级脚本的信息。 ASP 对象和组件以及脚本语言的参考页。 http://www.cnit618.com
13.1 引用的基本概念 147 13.1.1 对数组的引用 149 13.1.2 对哈希结构的引用 149 13.1.3 作为参数的引用 150 13.1.4 创建各种结构 151 13.2 结构的配置方法 152 13.2.1 一个例子:列表中的列表 152 13.2.2 ...
《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...
成功的RFI攻击的潜在web安全后果包括从敏感信息泄露和跨站点脚本(XSS)到远程代码执行,最终的结果是整个系统遭到破坏。 远程文件包含攻击通常发生在应用程序接收到一个文件路径作为网页的输入,但没有正确地对其进行...
《精通AngularJS》深入浅出地讲解了AngularJS的开发概念和原理,并通过丰富的开发实例向读者展示了构建复杂应用的完整过程,包括学习使用AngularJS特有的基于DOM的模板系统,实现复杂的后端通信,创建漂亮的表单,...
此外,PHP还具有开发速度快、可扩展性强、跨平台性好等特点,这些特性让PHP成为了广泛应用于Web开发、服务端编程、命令行脚本编写等领域的首选语言。 在Web开发方面,PHP可以与HTML、CSS、JavaScript等前端技术结合...
WebCruiser - Web 漏洞扫描器, 是一款轻量级但非常实用的Web安全扫描工具,能够扫描SQL注入(SQL注入), Cross Site Scripting(跨站), Local File Inclusion(本地文件包含), Remote File Inclusion(远程文件...
了解web应用安全的基本概念; 了解web应用安全的主要内容; Web应用安全简介 一、Web应用安全概述 1、Web应用的架构 C/S与B/S架构 胖客户端,成本高,难以维护,适用于局域网,难以跨平台 客户端仅浏览器,易于维护...
1.16 从控制结构或脚本中跳出 1.17 使用可替换的控制结构语法 1.18 使用declare 1.19 下一章 第2章 数据的存储与检索 2.1 保存数据以便后期使用 2.2 存储和检索Bob的订单 2.3 文件处理 2.4 打开文件 2.4.1...
第二部分,关于WEB网站优化相关知识点分享,分享内容如下: 网站优化的步骤 How a browser work 浏览器加载和渲染顺序 HTML页面加载和解析流程 减少 HTTP 的请求数 添加Cache缓存 减少域名查询 网站图片的合并压缩 ...
关系映射(ORM)层称为Groovy Server Pages (GSP)的表现层技术基于Spring MVC的控制器层构建于Gant 上的命令行脚本运行环境内置Jetty服务器,不用重新启动服务器就可以进行重新加载利用内置的Spring 容器实现依赖注入...
第1部分讲述PHP脚本语言概念,及如何控制执行、如何处理数据; 第2部分函数参考,按功能排序并给出各函数的实用例子; 第3部分讲述如何解决常见的编程问题,如排序和图表生成; 第 4部分给出如何用PHP创建整个Web...
NetBox 提供将您的应用编译成独立可执行文件的能力,极大的加快运行速度和代码安全性。使用 NetBox 开发,大大提高了应用系统的可扩展性、稳定性和安全性。NetBox 的出现也首次让应用软件开发商能够如此快速和容易的...
1.16 从控制结构或脚本中跳出 1.17 使用可替换的控制结构语法 1.18 使用declare 1.19 下一章 第2章 数据的存储与检索 2.1 保存数据以便后期使用 2.2 存储和检索Bob的订单 2.3 文件处理 2.4 打开文件 2.4.1 选择文件...
1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象的编程语言 3 1.2.2丰富的框架技术 4 1.2.3xml、css的应用 4 1.2.4使用javascript与ajax提升用户体验 7 1.3多种集成开发...
Active Server Pages (ASP) 是服务器端的脚本编写环境,您可用它来创建动态 Web 页或生成功能强大的 Web 应用程序。ASP 页是包括 HTML 标记、文本和脚本命令的文件。ASP 页可调用 ActiveX 组件来执行任务,例如连接...
本节的主题是介绍 Active Server Pages,解释 Active Server Pages 脚本的基本概念,并讨论诸如如何维持状态之类的更复杂的应用程序问题。 本节包括: 介绍 Active Server Pages:介绍 ASP 并描述该版本中的新...