跨站脚本攻击(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,全称Cross Site Scripting,是一种常见的Web应用程序安全漏洞,攻击者利用此漏洞向网页中注入恶意脚本,当其他用户浏览该页面时,这些脚本会被执行,从而可能窃取用户的敏感信息...
跨站脚本攻击作为一种长期存在的网络安全威胁,对于任何网站和Web应用来说都是不可忽视的风险。通过理解XSS攻击的基本原理、类型及其防御措施,可以帮助企业和个人更好地保护自己的系统免受此类攻击的影响。随着技术...
本文主要探讨了XSS(Cross Site Scripting,跨站脚本)攻击的基本概念、原理及其常见的几种攻击手法。XSS攻击是一种针对Web应用程序的安全漏洞,攻击者通过在合法网站上插入恶意脚本来获取用户的敏感信息。本文将...
标题中的“Go-一个方便切换分支和执行脚本的web小工具”表明这是一个基于Go语言开发的Web应用程序,它的主要功能是帮助用户便捷地切换代码仓库的分支,并且能够执行与之相关的脚本。这样的工具在软件开发流程中非常...
内容概要:本文详细阐述了跨站脚本(XSS)攻击的基本原理、攻击类型、可能引发的危害以及防范措施。首先介绍了XSS的概念及原理,包括恶意脚本是如何利用网页漏洞在用户浏览器中运行的。接着解释了三种主要的XSS攻击...
1. **基础概念**:首先,教程可能会介绍什么是脚本,它与编译型语言的区别,以及如何在不同的操作系统(如Windows、Linux、MacOS)上运行脚本。 2. **脚本语言入门**:包括Python、JavaScript、Bash、Perl、Ruby等...
文章首先介绍了守护进程和Shell的基本概念及其特性,然后针对Linux集群下如何有效管理多台服务器,以监控Web服务器为例,设计了一种Shell脚本守护程序,并对其进行了验证测试。结果表明,该Shell脚本监控Web服务器是...
脚本入侵,也称为跨站脚本攻击(Cross-Site Scripting,简称XSS),是指攻击者在Web页面中注入恶意脚本,当用户浏览这些页面时,恶意脚本会在用户的浏览器中执行,从而盗取用户敏感信息或破坏网站功能。这种攻击方式...
在本例中,标题提到的是如何使用VBS脚本来创建一个Web窗口,同时隐藏地址栏和工具栏,这通常是为了提供更专注的浏览体验或者特定的应用场景需求。 首先,让我们来理解这个过程的基本概念。在VBS中,我们可以使用`...
11. **安全性**:服务器脚本需要处理安全问题,如SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造等,开发者需采取相应的防护措施。 12. **错误处理与日志记录**:良好的脚本应具备错误处理机制,及时捕获并记录错误...
跨站脚本攻击(Cross-Site Scripting,简称XSS)是网络安全领域常见的攻击手段之一,主要针对Web应用程序。此攻击允许恶意攻击者通过在网页上注入可执行的脚本代码,来窃取用户的数据或者控制用户的浏览器行为。在...
跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web应用程序安全漏洞,其形成原因主要是由于Web应用程序对用户输入的数据过滤不充分或者处理不当,导致恶意脚本被注入到网页中。当其他用户访问这些包含恶意...
总而言之,通过本“Java Web开发,JavaScript脚本编写的pdf教程”,你将全面学习到Web开发中的核心概念和技术,从而能够独立地开发和维护动态网页应用程序。无论你是初学者还是希望深化现有技能的开发者,这份教程都...
Web安全主要关注的是保护Web应用程序免受各种攻击,如SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等。这些攻击可能导致数据泄露、服务中断甚至完全控制服务器。 压缩包内的"防御脚本文件"可能包括以下几种: 1. *...
Nginx通过配置不同的站点来管理多个网站的运行,而“添加站点脚本”就是一种自动化创建和管理Nginx站点配置的工具。下面我们将深入探讨Nginx站点脚本的工作原理以及如何使用它。 ### 1. Nginx的基本概念 Nginx是一...
本文将深入探讨如何在Chrome扩展程序中运行本地JavaScript(JS)脚本,以此来理解这一核心概念。 首先,让我们了解Chrome扩展的基本结构。一个标准的Chrome扩展通常包括以下几个文件: 1. `manifest.json`:这是...
Caché脚本语言开发数据库的Web应用程序的程序设计应用的运行环境包括Caché数据库管理系统、Caché脚本语言、Web服务器等。同时,需要掌握Caché系统的介绍、脚本语言的基本概念和应用、数据库及管理系统、Web访问...
执行这个文件很可能是启动和使用Freda ASP Web的第一步,它可能包含了运行Web应用所需的全部组件,包括服务器端脚本引擎、开发工具、调试器等。 **详细知识点:** 1. **ASP基础**:ASP是微软的服务器端脚本技术,...