【问题标题】:File upload from one domain to another domain文件从一个域上传到另一个域
【发布时间】:2012-10-04 11:50:42
【问题描述】:

我创建了一个包含两个模块的网站,

  1. 管理员
  2. 用户

它们托管在不同的域上。现在,当用户打开其域时,假设它的 abc.com 可以注册他们的公司并从那里上传照片,上传的照片将进入 Company_Logo 文件夹。 现在假设 ADMIN 的域是 xyz.com 。现在我想让 ADMIN 打开它的 xyz.com 并且可以看到从 abc.com 上传的照片现在我想要像 ADMIN 一样,xyz.com 可以将上传的照片更改为 Company_Logo 文件夹中的 abc.com。

简而言之,照片是从 abc.com 上的用户端上传并从 xyz.com 上的 ADMIN 端替换,所以我该怎么做

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    因此,您有两个不同的站点,托管在不同的域甚至不同的服务器上,并且您希望站点 A 在某些文件上传时通知站点 B。然后,您希望能够从站点 B 更改站点 A 上的该文件。

    在我看来,您需要在站点 A 上创建某种 API,让站点 B 的用户(管理员)检查最近上传的文件并让他们覆盖它。

    【讨论】:

    • 请看我的回答,如果它看起来正确,请告诉我......当你这么说时,我实际上是在构建答案。 :)
    • @Mike 我认为 HttpHandler 在这里有点矫枉过正。一个简单的服务可以让您检索文件列表(可能还有文件数据)并让您保存新图像。
    • 我想您在技术上仍然可以让图像使用路径。
    【解决方案2】:

    好的,这可以完成,但您需要使用HttpHandler。你可以找到一个很好的例子here,但我会拼出重要的部分。我无法在此处为您编写整个处理程序。

    首先,让我们在 web 项目中构建一个类,并命名为ImageHandler ...

    public class ImageHandler : IHttpHandler
    {
    }
    

    ...接下来我们来实现接口...

    public bool IsReusable
    {
        get { return false; }
    }
    
    public void ProcessRequest(HttpContext context)
    {
        // find out what we're trying to do first
        string method = context.Request.HttpMethod;
    
        switch (method)
        {
            case "GET":
                // read the query string for the document name or ID
    
                // read the file in from the shared folder
    
                // write those bytes to the response, ensuring to set the Reponse.ContentType
                // and also remember to issue Reponse.Clear()
    
                break;
            case "PUT":
                // read the Headers from the Request to get the byte[] of the file to CREATE
    
                // write those bytes to disk
    
                // construct a 200 response
    
                break;
            case "POST":
                // read the Headers from the Request to get the byte[] of the file to UPDATE
    
                // write those bytes to disk
    
                // construct a 200 response
    
                break;
            case "DELETE":
                // read the Headers from the Request to get the byte[] of the file to DELETE
    
                // write those bytes to disk
    
                // construct a 200 response
    
                break;
        }
    }
    

    ...最后我们需要在web.config 中设置处理程序...

    <configuration>
       <system.web>
          <httpHandlers>
             <!-- remember that you need to replace the {YourNamespace} with your fully qualified -->
             <!-- namespace and you need to replace {YourAssemblyName} with your assembly name    -->
             <!-- EXCLUDING the .dll                                                              -->
             <add verb="*" path="*/images/*" type="{YourNamespace}.ImageHandler, {YourAssemblyName}" />
          </httpHandlers>
       </system.web>
    </configuration>
    

    最后,您还要做的是传递某种会话密钥,当您进入处理程序时可以验证该密钥,否则这对所有人开放。如果您不需要 PUTPOSTDELETE 动词也没关系,但您确实需要。

    如果您不关心每个人都可以访问GET,从技术上讲,您不需要检查GET 上的会话密钥,但您必须检查其他人。

    【讨论】:

    • 您能否在此详细说明应在哪个站点实施处理程序,用户或管理员。我假设它应该在用户站点上实现,如果是这样,管理站点应该做什么?将文件发布到用户站点?
    • @MurtuzaKabul,是的,它在User 站点上实现,Admin 站点利用处理程序获取和更新图像。
    • 我写代理代码的第二个建议是完全一样的,但我不推荐它,因为你打开一个公开的界面来发布一些东西。现在你也必须保护它,这不是维护的噩梦吗?
    • @MurtuzaKabul,在您的解决方案中,您声明(尽管您似乎更新了它或者我读错了)管理员和用户站点都将保存一份副本。这就是我具体指的。
    • 你还没有回答我的问题。如果管理站点正在操纵用户站点(这是其唯一目的),其中有什么问题以及安全漏洞在哪里?
    【解决方案3】:

    你有两个选择。

    • 如果您的两个站点都托管在同一台计算机或共享托管环境中,则您的站点很可能可以访问其他目录。在这种情况下,您可以轻松地将图像放在所需的文件夹中。

    • 现在是第二种情况,您的一个站点无权访问另一个站点的文件夹,这相当复杂。您必须创建一个代理,管理站点将在其中接受图像,然后将其放入主站点文件夹中。不过我不推荐这个。

    【讨论】:

    • 当您的管理站点访问您的主站点文件时,绝不是安全例外。只有当您可以访问这两个站点时才能执行此操作,这是您访问文件的唯一方式。我一直在为我的几个网站这样做,没有任何安全问题。你能解释一下这里涉及到什么安全问题吗?
    • 好的,但是给我编码的答案..我需要代码,这两个域都是 LIVE DOMAIN 不在本地
    • 您也可以使用实时域来实现。如果我知道您的两个域的文件结构,给您一个工作代码。让我知道这两个站点是托管在同一台服务器上还是不同的服务器上。
    • 迈克,我很想知道你的回答,好像真的是这样,这对我也有帮助。
    • 好吧,当一个站点的目的是控制另一个站点的行为时,这绝不是一个安全漏洞。如果 Admin 站点无法控制用户站点的内容,那么 admin 站点的目的是什么?否则你有什么建议?
    【解决方案4】:

    您可以分两步完成:

    1) 使用标准文件上传机制将图像上传到您的服务器

    2) 使用HttpWebRequest 类在原始上传后立即将图像上传到服务器端的不同服务器。 请参考这篇文章:Upload files with HTTPWebrequest (multipart/form-data)

    请参阅此内容: http://forums.asp.net/t/1726911.aspx/1

    【讨论】:

    • 我想我已经提出了这个解决方案。这并不安全,因为任何人都可以上传文件。所以我不推荐它。
    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 2017-09-19
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2013-05-18
    相关资源
    最近更新 更多