微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何阻止用户在浏览器中查看服务器上的某些文件?

如何解决如何阻止用户在浏览器中查看服务器上的某些文件?

我有一个 ASP.Net MVC 应用程序,它在用户请求(通过 http 请求)时动态生成 xml 文件。唯一的问题是它还会将它们写入本地存储的文件中。所以我真的有两个问题:

  1. 是否可以不在本地写入文件,但仍将响应与文件一起发送给客户端

  2. 或者我可以阻止用户输入文件 URL 并在他们的浏览器(例如 example.com/test.xml)上查看它

我有一个身份验证系统来控制某些视图的访问,但我不知道如何在没有视图的情况下执行此操作

当前写入文件和发送响应的方式:

[AcceptVerbs(HttpVerbs.Get)]
public void SendXML()
{
    if(!User.Identity.IsAuthenticated)
    {
        return;
    }

    string path = Server.MapPath("~/Temp/test.xml");

    using (Stream s = File.Open(path,FileMode.OpenorCreate))
    {
        using (XmlWriter writer = XmlWriter.Create(s,settings))
        {
            // Write Xml Document
        }
    }

    Response.ContentType = "text/xml";
    Response.TransmitFile(path);
}

当前发送请求的方式:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if(this.readyState == 4 && this.status == 200){
        // Good
    }
};
xmlhttp.open("GET","http://example.com/MyController/SendXML",true);
xmlhttp.send();

解决方法

是否可以不在本地写入文件但仍然发送 仅将文件响应给客户端

是的。有可能的。一旦将 XML 放入字符串中。您可以将 XML 字符串转换为 byte array,然后转换为 octet stream 并从 API 发送下来,而不是将该 XML 写入文件并发送。这将为最终用户下载文件,因为您没有将任何内容存储到文件系统

var xml = @"<root></root>";
byte[] xmlBytes = System.Text.Encoding.UTF8.GetBytes(xml);
var stream = new MemoryStream(xmlBytes); 
return File(stream,"application/octet-stream","DownloadName.xml");

或者我可以阻止用户输入文件 URL 并在 他们的浏览器,例如example.com/test.xml

这取决于,您可以有多种选择。您可以集成身份验证机制(如 cookie 身份验证或令牌身份验证(如 IdentityServer))以促进受保护的端点。如果您有受保护的端点,则可以将访问权限限制为仅特定用户。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。