2

用例:我正在开发一个使用ajax 上传功能的图像上传器。我想将图像上传到用户在网站上创建的子域。例如,当用户在网站上创建域时,我复制了一个用于上传图像的 php 脚本到新域即image-cropping.php。当用户将任何图像上传到他的域时,我想向该文件发送请求。

问题
当我尝试上传图像时,我得到了。我的Error: Permission denied to access property 'readyState'调用js 文件已打开xyz.google.com,并且上传 php 脚本已打开abc.google.com

研究
在做了一些谷歌搜索和研究之后,我了解到 javascript 不允许跨域发送请求,它需要一个 http 代理来处理这个。这是我尝试过的代码。运行 ajax 上传器的脚本。在行动中我有其他域上文件的路径(路径是动态构建的)。

   new AjaxUpload(btnUpload, {
        action: 'includes/modules/domain_creation/proxy.php',
        name: 'image',
        onSubmit: function(file, ext){
            if (! (ext && /^(jpg|png|jpeg|gif|JPG|JPEG|PNG|GIF)$/.test(ext))){ 
                alert('Only JPG, PNG or GIF files are allowed');
                return false;
            }
            $('#thumbImg').html('<img src="http://localhost/gobiggi_VS_2_2/images/appImages/imageLoader.png" />');
        },

1)我是否以正确的方式做这件事(第一次工作)?真的需要代理吗?
2)如何以及在哪里可以设置代理,以便可以协商错误权限?
3)它打开了哪些安全问题(它安全吗?如果不是什么替代方案)?任何指示或建议都会对我有所帮助。
感谢您的时间。

更新:
我正在使用这个代理脚本来上传图片。部分代码是

   $domainUsername = $_SESSION['domainUsername'];
   $domainNameWeb = $_SESSION['domainName'];
   //$fileParameterProxy = $_FILES['image'];
   //Destination URL: Where this proxy leads to the upload script
     $destinationURL = 'http://www.'.$domainNameWeb.'/'.$domainUsername.'/upload.php';
   //The only domain from which requests are authorized.
   $RequestDomain = 'abc.net';

现在我没有得到,Error for permission但我无法将图像上传到服务器上。当我尝试这样做print_r($_FILES)时,我的上传脚本上出现了一个空白数组。

我相信我遗漏了一些东西!有人可以纠正吗?
感谢您的时间!

4

1 回答 1

1

1和2)您必须将您的代理设置为操作,因为那是您可以上传文件的地方。然后代理将向另一个域发出请求,它可以将文件发送到该域。

3) 取决于您的代理实现。您应该避免将文件存储在本地或执行/包含来自用户输入的任何内容,就像编写 php 脚本时一样。直接将 tmp 文件发送到您的目标服务器,这也是最快的实现。

于 2013-02-12T14:30:31.027 回答