Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SWF如何将内容注入网页_Javascript_Html_Actionscript 3_Security - Fatal编程技术网

Javascript SWF如何将内容注入网页

Javascript SWF如何将内容注入网页,javascript,html,actionscript-3,security,Javascript,Html,Actionscript 3,Security,通过嵌入followswf代码,当在单个页面中运行时,一个新的选项卡将显示所需的URL和顶部的广告栏。不需要用户交互 <embed width="1" height="1" align="middle" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="sameDomain"

通过嵌入followswf代码,当在单个页面中运行时,一个新的选项卡将显示所需的URL和顶部的广告栏。不需要用户交互

<embed width="1" height="1" align="middle"
       pluginspage="http://www.macromedia.com/go/getflashplayer"
       type="application/x-shockwave-flash" allowscriptaccess="sameDomain"
       name="blog" bgcolor="000000" wmode="transparent" quality="high"
       src="http://i1177.photobucket.com/albums/x348/hosting504/red.swf" 
       flashvars="web=www.agitehabbero.com/index.php&creador=supercito">

如果代码嵌入到框架中,则不会创建新选项卡,而是修改框架以添加html页面

编辑:页面上没有JAVASCRIPT。


SWF文件如何做到这一点?(将内容注入网页)

在AS中有一个类。它帮助flash与JS通信(调用JS函数或JS调用flash函数)。然后抛出DOM,即可将内容添加到页面中。可能是这样。

一个例子

AS3

HTML


有几种方法可以从Flash打开一个新的浏览器窗口(不需要HTML页面的帮助):

不确定这是否可行

现代浏览器有相当强大的弹出窗口拦截器,在大多数情况下,如果没有用户交互,就不允许打开新窗口/选项卡

即使您设法欺骗了一个浏览器,它也有可能无法在不同的浏览器/操作系统中工作

顺便说一句,如果页面上没有JS,并且您无法编辑HTML,那么您可以使用“伪协议”直接从Flash运行JS:

var req:URLRequest = new URLRequest('javascript:void(alert('This is called from Flash'))');
navigateToURL(req);

因此,从理论上讲,您可以将相当复杂的JS“注入”到HTML页面。

首先,您应该确保使用的是window.top.document。从那里尝试打开窗口——如果窗口句柄为null,则打开100%的iframe

    /**
     *  @public
     */
    public function JSTest():void {

        ExternalInterface.call('eval', [

            "window.createFrame = function() {",
                "var doc                = window.top.document;",
                "var ifrm               = doc.createElement('IFRAME');",
                "ifrm.style.position    = 'absolute';",
                "ifrm.style.left        = '0';",
                "ifrm.style.top         = '0';",
                "ifrm.style.width       = '100%';",
                "ifrm.style.height      = '100%';",
                "ifrm.setAttribute('src', 'http://vimeo.com');",
                "doc.body.appendChild(ifrm);",
            "}",

            // try opening window, otherwise, open an iframe
            "if (!window.open('http://www.vimeo.com', '_top')) {",
                "window.createFrame();",
            "}"

        ].join('\n'));

    }

此ActionScript3.0代码将插入一个匿名函数,然后在传递单个参数“hello”时执行它:
ExternalInterface.call(“函数(msg){alert(msg);}”,“你好”)(它像下面的Javascript代码一样执行:
函数(msg){alert(msg);}(“hello”);

由于可以插入代码,因此可以编写代码来操作文档(添加元素、修改样式、更改元素值等)。例如,这个AS3代码:
ExternalInterface.call(“function(){document.write(\'Hello,world!\”);})将在HTML页面上显示“Hello,world!”

此外,从:

  • 在包含HTML页面中SWF文件的对象标记中,设置以下参数:
  • 在SWF文件中,添加以下ActionScript:
    flash.system.Security.allowDomain(sourceDomain)
我测试了以上所有功能,它在我的浏览器上运行得很好:谷歌Chrome19、IE 8、Firefox12

按照您的要求,文档端没有javascript:)

明白了
没有Javascript,正如您所说。
我不完全理解这段代码的来龙去脉,但我还是设法让它正常工作了。 下载并反编译red.swf,有2帧,只有第二帧有以下代码(注释是我的)

哦,这是ActionScript2,看起来像AS1(使用相同的VM)

为了进一步测试,我简化了flash代码并上传到服务器:

stop();
getURL ("http://supercito.com.ar/g3/web.php?url=" + _root.web, _root.marco);
现在在服务器中,我们可以使用不同的输入,看看会发生什么。 链接是:

(对不起我在其他事情中间的脏乱地址) 如果我们对frame参数使用任何值,http://supercito.com.ar页面将加载并使窗口成为弹出窗口,除非我们使用_self。
问题是我看不到这个新窗口变成弹出窗口的部分,可能它隐藏在它加载的jquery文件中。我不知道。甚至和查尔斯核实过。 如果有人有主意,请告诉我,我会试试。
希望这有帮助。
这是我在这里的第一篇帖子:)

编辑:
为了更好的测试,我上传了一个修改。
现在我们还可以更改主URL。

stop();
getURL (_root.main + _root.web, _root.marco);

编辑编号2
这是闪光
有了新的设置,你可以尝试任何URL,只要目标窗口不是self或top,它就会变成一个弹出窗口,问题是Chrome会将其解释为弹出窗口,而IE只是将其解读为一个空白窗口。

在我看来,这是一个bug。

我以为是这样,但页面中没有其他Javascript。这只是SWF,页面上存在什么Javascript并不重要
ExternalInterface
调用浏览器本身的Javascript功能。@pbaris也许有一些例子对50代表来说会更好。:)我已经知道ExternalInterface,我想问一下有问题的red.swf在没有JS的情况下是如何做到的。而且这个例子看起来像是从一个网站上复制过来的?我尝试将代码嵌入到iframe和常规框架中,但在这两种情况下,代码都打开(或试图打开)一个新窗口/选项卡,而不是修改框架。你确定它修改了框架本身吗?我最好得到赏金:)你的问题有误导性,你接受了一个答案,这个答案可能是最糟糕的解决方案,可以在red.swf文件中找到。提比略:接受的解决方案不需要将“AllowScriptAccess”设置为“始终”。你的是。这很可怕,我真的需要安装adblock。@o.v.别担心,添加主机提供商嵌入swf内容,allowScriptAccess=never(包括谷歌广告)。@o.v.不要认为这只是flash。当你安装任何插件时,你给它与你给浏览器相同的特权。浏览器不会对插件进行沙盒处理,它们几乎可以对您的系统执行任何操作。@在internet页面上运行的Malayev插件和Flash是沙盒,它们不能触摸系统。另外,Flash可以被沙盒化,以避免它嵌入的页面。不,你错了。插件不是沙盒,它们具有与浏览器相同的权限,可以对系统执行任何操作。我想你的意思是扩展。我记得那天我们也使用
getURL()
来注入javascript,但事实并非如此。supercito上的PHP文件是如何做到这一点的?你说“实际工作是众所周知的”和“我看不到这个新窗口变成弹出窗口的部分”我错了,我认为它是w
    /**
     *  @public
     */
    public function JSTest():void {

        ExternalInterface.call('eval', [

            "window.createFrame = function() {",
                "var doc                = window.top.document;",
                "var ifrm               = doc.createElement('IFRAME');",
                "ifrm.style.position    = 'absolute';",
                "ifrm.style.left        = '0';",
                "ifrm.style.top         = '0';",
                "ifrm.style.width       = '100%';",
                "ifrm.style.height      = '100%';",
                "ifrm.setAttribute('src', 'http://vimeo.com');",
                "doc.body.appendChild(ifrm);",
            "}",

            // try opening window, otherwise, open an iframe
            "if (!window.open('http://www.vimeo.com', '_top')) {",
                "window.createFrame();",
            "}"

        ].join('\n'));

    }
    /*

flashvars are loaded to the _root as following:
_root.web = www.agitehabbero.com/index.php&creador=supercito
oddly the amperesand (&) gets interpreted too so we also get.
_root.creador=supercito

*/
    stop();
    var url = _root.web;
    if ("supercito" == _root.creador) {//verifies that the url passed has a value pair creador=supercito I guess to avoid it being used for something else?
        getURL ("http://supercito.com.ar/g3/web.php?url=" + url, "glu");
        /* the getURL calls this site, in a new window (frames are treated as windows by browsers) 
        somehow flash , as it doesn't find the frame or window, converts it into a pop up */
    } else {
        getURL ("http://supercito.com.ar/404", "glu");
    }
stop();
getURL ("http://supercito.com.ar/g3/web.php?url=" + _root.web, _root.marco);
stop();
getURL (_root.main + _root.web, _root.marco);