【问题标题】:Chrome jQuery form plugin cross-domain security bug?Chrome jQuery 表单插件跨域安全漏洞?
【发布时间】:2011-04-12 23:34:33
【问题描述】:

我正在尝试使用jQuery Form Plugin 来处理以 ajax 形式上传的文件。

只要表单中没有输入[type=file],一切正常。

当我将文件输入类型添加到表单时,它会上传文件并按预期在 FireFox 中工作,但我在 Chrome 中收到此错误:

不安全的 JavaScript 尝试访问 带有 URL 的框架 http://swbdev.net:8888/inc/ajax/edit_page/ 从带有 URL 的框架 http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements。 域、协议和端口必须 匹配。

它明确指出域、协议和端口必须匹配。我是否遗漏了什么,在同一个错误中它显示两个 URL 以及域、协议和端口都匹配?

这里是调用插件的 JavaScript:

    <script type="text/javascript">
$(document).ready(function() { 
    var options = { 
        success:    function(data) { 
            alert(data); 
        },
        dataType: 'html',
        url: '/inc/ajax/edit_page/'
    }; 
    $('#add_elements_form').ajaxForm(options); 
 });
</script>

更多信息:

它现在在 FireFox 中也失败了,不知道为什么它之前会起作用,但这是 FireFox 中的错误:

权限被拒绝 http://swbdev.net:8888获取 属性 Location.href

它指向插件中的这个代码区域:

            function cb() {
            if (xhr.aborted) {
                return;
            }
            var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
            if (!doc || doc.location.href == s.iframeSrc) {
                // response not received yet
                if (!timedOut) return;
            }
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
            var ok = true;

具体来说,这一行:

 if (!doc || doc.location.href == s.iframeSrc

【问题讨论】:

  • 将 document.domain 添加到 AJAX 正在发布的 .php 文件中以解决此问题,但会使解释和解析返回数据变得更加困难......
  • 是的。我在 AJAX 查询中调用的 PHP 文件中添加了 JavaScript(document.domain)。
  • 你能把你写到php文件的内容准确地写出来吗?是目标文件吗?

标签: javascript jquery ajax google-chrome


【解决方案1】:

我最近遇到了与 jquery 文件上传相同的问题。错误与大卫 B 相同

“不安全的 JavaScript 尝试从 URL http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements 的框架访问 URL http://swbdev.net:8888/inc/ajax/edit_page/ 的框架。域、协议和端口必须匹配。”

在我的情况下,调用页面 url 和文件上传 url 都指向 xxx.mydomain.com,但是当调用页面加载时,一个 javascript 将 document.domain 设置为 mydomain.com 并导致错误。在调用页面加载后检查 document.domain,发现问题并通过删除 xxx.mydomain.com 的 javascript 中的 document.domain 行来修复

【讨论】:

    【解决方案2】:

    确实很奇怪。我会尝试将整个设置为“POST”,因为 input[type=file] 将需要它。当然,它甚至可以混合使用,但请尝试一下。

    $(document).ready(function() { 
        var options = { 
            success:    function(data) { 
                alert(data); 
            },
            dataType: 'html',
            type: 'POST',   // <-- This was added
            url: '/inc/ajax/edit_page/'
        }; 
        $('#add_elements_form').ajaxForm(options); 
    });
    

    【讨论】:

    • 很遗憾,这没有任何意义...不过还是谢谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多