整理于《XSS跨站脚本攻击剖析与防御》—第6章

Flash在客户端提供了两个控制属性:

allowScriptAccess属性和allowNetworking属性,其中AllowScriptAccess控制Flash与HTML页面的通信,如果设置不恰当会导致XSS;而AllowNetworking控制Flash与外部网络的通信,如果设置不当会导致CSRF。

CSRF的中文名称是“跨站请求伪造”,和XSS一样是一种常见的Web程序漏洞(攻击手段),CSRF能够做的事情是以你的名义发送恶意请求,例如,发布一篇文章、发送一封邮件、进行网上银行转账等。在本书第7章会探讨CSRF。

allowNetworking属性

可选的值如下:

All:SWF 文件允许使用所有网络API,为默认值
internal  :SWF文件不可以调用浏览器导航或浏览器交互 API,但可以调用任何其他联网API
none  :SWF文件不可以调用任何联网API,也不可以调用任何SWF间通信API
当allowNetworking被设置为internal时,以下 API 被禁止:

navigateToURL();
fscommand();
ExternalInterface.call()。

当 allowNetworking 设置为none时,除了上面列出的API外,还会禁止以下 API:

sendToURL();
FileReference.download();
FileReference.upload();
Loader.load();
LocalConnection.connect();
LocalConnection.send();
NetConnection.connect();
NetStream.play();
Security.loadPolicyFile();
SharedObject.getLocal();
SharedObject.getRemote();
Socket.connect()。

如果想利用Flash进行CSRF,那么嵌入Flash的HTML标签的allowNetworking属性值必须为all或者internal。当allowNetworking=all时,允许使用所有的网络通信;当allowNetworking=internal时,尽管禁止了与浏览器交互的API,仍可以与网络通信,因此同样能实现CSRF。

在ActionScript 2.0中,可以使用LoadVars 类在Flash应用程序和服务器之间传输变量,请看示例:

stop();
  var reVar:LoadVars = new LoadVars();   //定义接收服务器的返回信息
  var sendVar:LoadVars = new LoadVars();  //定义发送到服务器的信息
  sendVar.user = 'cnn4ry';          //初始化变量user
  sendVar.msg = 'XSS';            //初始化变量msg
  reVar.Value = 0;              //初始化接收变量值Value=0
  reVar.onLoad = getServerInfo;
  sendVar.sendAndLoad("http://127.0.0.1/test.php",reVar,"POST");
  trace("loading...");
  function getServerInfo(Success:Boolean)
  {
   if(Success)
   {
     trace(reVar.Value)
   }
   else
   {
     trace("false!");
   }
  }

由此可见,在ActionScript 2.0中传输数据很方便。而在ActionScript 3.0中,原来的loadVars方法已经被废弃,改用一系列的类来实现与后台数据的交互,比如URLLoader类与URLVariables类。

例如,要向http://127.0.0.1/test.php发送一个GET请求,其中URL附加的参数是user=cnn4ry&msg=CSRF,实现的ActionScript代码如下:

function xss():void
{
var urlLoader:URLLoader=new URLLoader();
var request:URLRequest=new URLRequest();
request.url="http://127.0.0.1/test.php";
request.method=URLRequestMethod.GET;
request.data="user=cnn4ry&msg=CSRF";
urlLoader.load(request);
}
xss();

类似地,发送POST请求的操作也很简单,ActionScript代码如下:

import flash.net.URLRequest;
import flash.system.Security;
var url = new URLRequest("http://127.0.0.1/test.php");
var shellcode = new URLVariables();
shellcode = "user=cnn4ry&msg=CSRF";
url.method = "POST";
url.data = shellcode;
sendToURL(url);
stop();

但是,如果Flash要跨域读取数据,必须经过crossdomain.xml文件的允许。

假设目标站点有crossdomain.xml,如下:

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

通配符的使用意味着允许访问来自任何域的文档,因此可以使用Flash跨域读取数据。如果目标站点根目录没有crossdomain.xml文件,但是设置了by-content-type等相关属性,同样可以利用Security.loadPolicyFile()来加载其他域中的跨域文件绕过限制,如:

Security.loadPolicyFile("http://www.test.com/sub/crossdomain.xml")

Web前端安全之利用Flash进行csrf攻击的更多相关文章

  1. Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行

      H1/H2/H3/H4标题标签常常使用在一个网页中唯一标题.重要栏目.重要标题等情形下. H1在一个网页中最好只使用一次,如对一个网页唯一标题使用.H2.H3.H4标签则可以在一个网页中多次出现, ...

  2. 风炫安全web安全学习第二十八节课 CSRF攻击原理

    风炫安全web安全学习第二十八节课 CSRF攻击原理 CSRF 简介 跨站请求伪造 (Cross-Site Request Forgery, CSRF),也被称为 One Click Attack 或 ...

  3. 前端安全系列:如何防止CSRF攻击?

    背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XSS.CSRF 等安全问题之外,又时常遭遇网络劫持 ...

  4. 前端安全之CSRF攻击

    前端安全之CSRF攻击 转载请注明出处:unclekeith: 前端安全之CSRF攻击 CSRF定义 CSRF,即(Cross-site request forgery), 中文名为跨站请求伪造.是一 ...

  5. CSRF——攻击与防御

    CSRF——攻击与防御 author: lake2 0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意 ...

  6. 转-CSRF——攻击与防御

    0x01 什么是CSRF攻击 CSRF是Cross Site Request Forgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/PO ...

  7. csrf 攻击和防御

    CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:       攻击者盗用了你的身份,以你的名义发送恶 ...

  8. CSRF攻击与防御(写得非常好)

    转自:http://blog.csdn.net/stpeace/article/details/53512283 CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forge ...

  9. 转!!CSRF攻击与防御(写得非常好)

    CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:       攻击者盗用了你的身份,以你的名义发送恶 ...

随机推荐

  1. Spring Boot 利用 nginx 实现生产环境的伪热更新

    当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...

  2. 增删改查——Statement接口

    1.增加数据表中的元组 package pers.datebase.zsgc; import java.sql.Connection; import java.sql.DriverManager; i ...

  3. 第二次实验报告:使用Packet Tracer分析应用层协议

    个人信息:      •  姓名:李微微       •  班级:计算1811       •  学号:201821121001 一.摘要 本文描述使用Packet Tracer,正确配置网络参数,抓 ...

  4. python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为

    python接口自动化测试二十七:密码MD5加密   ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...

  5. 为什么使用B+Tree索引?

    什么是索引? 索引是一种数据结构,具体表现在查找算法上. 索引目的 提高查询效率 [类比字典和借书] 如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从下往下找到y字 ...

  6. BASLER Pylon 抓取策略

    BASLER Pylon 抓取策略 ( 涛哥工业技术 微信号 TaoRobotics) One by One Grab Strategy 逐个抓取策略 当使用 one by one 抓取模式时,图像按 ...

  7. APP功能测试要点(功能测试重点)

    APP功能测试要点 1.功能性测试 根据产品需求文档编写测试用例而进行测试,包括客户端的单个功能模块以及功能业务逻辑(功能交互)如:涉及输入的地方需要考虑等价类,边界值,异常或非法等 1.1 安装与卸 ...

  8. Build a Contest-创建比赛 CodeForce1100B

    题目链接:Build a Contest 题目原文 Arkady coordinates rounds on some not really famous competitive programmin ...

  9. 品Spring:SpringBoot发起bean定义注册的“二次攻坚战”

    上一篇文章整体非常轻松,因为在容器启动前,只注册了一个bean定义,就是SpringBoot的主类. OK,今天接着从容器的启动入手,找出剩余所有的bean定义的注册过程. 具体细节肯定会颇为复杂,同 ...

  10. selenium介绍及环境安装

      selenium简介: seelenium是web应用程序自动化工具,通过自动操作浏览器,进行点击.输入.回车.返回等来模拟用户的真实行为.如何理解和看待selenium项目,selenium官方 ...