热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

了解:XSS跨站脚本攻击原理及常用的防护方法

XSS(CrossSiteScript)跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行

摘要


XSS(Cross Site Script)跨站脚本攻击。它指的是恶意攻击者往Web 页面里插入恶
意html 代码,当用户浏览该页之时,嵌入其中Web 里面的html 代码会被执行,从而
达到恶意用户的特殊目的。本文介绍了该攻击方式,并给出了一些防范措施。


原理


XSS 属于被动式的攻击。攻击者先构造一个跨站页面,利用script、

hello

 

以普通用户身份修改user value 为以上任何一个,当admin 浏览index.jsp 时,即
可悄无声息的修改admin value
这里演示了3 种跨站手法,1 是利用img、iframe 等tag 直接发起请求,这适用于
无法直接出script 的情况,其中http://tinyurldd.com/2xwfed 是一个redirect,指向
http://10.10.67.25:8080/testxss/doadmin.jsp?v=hacked2 ;2 是用script 提交post 表
单;3 是ajax 技术。

以上攻击能够成功有2 个原因:1. 应用程序没有对user value 做足够多的过滤,导
致用户有机会构造一个复杂的跨站语句来触发admin 的非预期行为;2. 应用程序在响
应admin value 修改请求时没有防范措施来识别这是不是出于用户主动。
漏洞1 很容易修复,只要像防止SQL Injection 那样对用户输入的所有内容都过滤即
可。漏洞2 才是问题的根源,即便我们修补了漏洞1,只要诱使admin 用户访问包含 src="http://tinyurldd.com/2xwfed"> 的页面,仍然能达到目的,而这是一件极容易
做到的事。

 

防范措施


这里给出一些防范XSS 攻击的措施。必须说明的是,对于XSS 攻击,并不像SQL
Injection 那样可以有一劳永逸的解决方案——只需要grep 一下所有的sql 调用。这是一
场长期的斗争,而且往往需要我们采取修改业务流程、产品设计等看似削足适履的手段。
先总结一下常见的攻击手法:
1. 依赖跨站漏洞,需要在被攻击网站的页面种入脚本的手法
1.1. COOKIE 盗取,通过Javascript 获取被攻击网站种下的COOKIE,并发送给攻击者。
1.1.1. 从COOKIE 中提取密码等隐私
1.1.2. 利用COOKIE 伪造session,发起重放攻击
1.2. Ajex 信息盗取,通过Javascript 发起ajex 请求。
1.2.1. 从ajex 结果中获取隐私。
1.2.2. 模拟用户完成多页表单。
2. 不依赖跨站漏洞的手法
搜狐公司研发中心版权所有,仅供技术交流,转载请保留上述文字
2.1. 单向HTTP 动作,通过img.src 等方法发起跨站访问,冒充被攻击者执行特权操作。
但是很难拿到服务器的返回值。
2.2. 双向HTTP 动作,如果服务器产生一段动态的script,那么可以用script.src 的方法
发起跨站访问并拿到服务器的返回值。
防范手法如下:
1. 防堵跨站漏洞,阻止攻击者利用在被攻击网站上发布跨站攻击语句
不可以信任用户提交的任何内容,首先代码里对用户输入的地方和变量都需要仔细
检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写到页面之前都必须加以
encode,避免不小心把html tag 弄出来。
这一个层面做好,至少可以堵住超过一半的XSS 攻击。
2. COOKIE 防盗
首先避免直接在COOKIE 中泄露用户隐私,例如email、密码等等。
其次通过使COOKIE 和系统ip 绑定来降低COOKIE 泄露后的危险。这样攻击者得到的
COOKIE 没有实际价值,不可能拿来重放。
3. 尽量采用POST 而非GET 提交表单
POST 操作不可能绕开Javascript 的使用,这会给攻击者增加难度,减少可利用的
跨站漏洞。
4. 严格检查refer
检查http refer 是否来自预料中的url。这可以阻止第2 类攻击手法发起的http 请求,
也能防止大部分第1 类攻击手法,除非正好在特权操作的引用页上种了跨站访问。
5. 将单步流程改为多步,在多步流程中引入效验码
多步流程中每一步都产生一个验证码作为hidden 表单元素嵌在中间页面,下一步操
作时这个验证码被提交到服务器,服务器检查这个验证码是否匹配。首先这为第1 类攻
击者大大增加了麻烦。其次攻击者必须在多步流程中拿到上一步产生的效验码才有可能
发起下一步请求,这在第2 类攻击中是几乎无法做到的。
6. 引入用户交互
简单的一个看图识数可以堵住几乎所有的非预期特权操作。
7. 只在允许anonymous 访问的地方使用动态的Javascript。
8. 对于用户提交信息的中的img 等link,检查是否有重定向回本站、不是真的图片等
可疑操作。
9. 内部管理网站的问题
很多时候,内部管理网站往往疏于关注安全问题,只是简单的限制访问来源。这种
网站往往对XSS 攻击毫无抵抗力,需要多加注意。
安全问题需要长期的关注,从来不是一锤子买卖。XSS 攻击相对其他攻击手段更加
隐蔽和多变,和业务流程、代码实现都有关系,不存在什么一劳永逸的解决方案。此外,
面对XSS,往往要牺牲产品的便利性才能保证完全的安全,如何在安全和便利之间平衡
也是一件需要考虑的事情。


推荐阅读
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 使用 jQuery 实现页面加载进度条
    页面加载进度条是提升用户体验的重要工具,通过在页面头部显示一个加载状态,并在页面完全加载后隐藏,可以有效减少用户的等待焦虑。本文将详细介绍如何使用 jQuery 实现这一功能。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
author-avatar
mobiledu2502854077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有