C# 检索外部html文件并安全地显示在浏览器中

C# 检索外部html文件并安全地显示在浏览器中,c#,asp.net-mvc,file,security,C#,Asp.net Mvc,File,Security,我正在一个在线出版物订阅网站上工作。我是在ASP.NETMVC1中开发的 基本上,用户购买了一本杂志或报纸,并且他们可以使用该出版物的路径。但是,第22个问题是,不允许他们查看发布的文件路径,因为这是不安全的 我构建了一个函数,可以检索出版物并下载,而不向用户显示文件路径,但这是一个问题,因为出版物是HTML文件,需要同一目录中的其他文件和文件夹才能查看杂志或报纸 我知道你可能会说下载整个目录文件夹,但这是不合理的,因为它可以高达200MB。我想可能会检索文件路径,然后重定向到一个页面,该页面将

我正在一个在线出版物订阅网站上工作。我是在ASP.NETMVC1中开发的

基本上,用户购买了一本杂志或报纸,并且他们可以使用该出版物的路径。但是,第22个问题是,不允许他们查看发布的文件路径,因为这是不安全的

我构建了一个函数,可以检索出版物并下载,而不向用户显示文件路径,但这是一个问题,因为出版物是HTML文件,需要同一目录中的其他文件和文件夹才能查看杂志或报纸

我知道你可能会说下载整个目录文件夹,但这是不合理的,因为它可以高达200MB。我想可能会检索文件路径,然后重定向到一个页面,该页面将在iframe中加载出版物,但我认为这将是一个安全风险,任何对浏览器稍有了解的人都可以查看源代码并从中获取文件路径


如果有人对检索html文件并将其显示在浏览器中的安全方法有任何建议,我们将不胜感激。谢谢。

通过SFTP通过C#连接到远程服务器(所有发布文件都驻留在那里)。[这显示了如何连接到SFTP并通过C#.Net下载该文件]并将该文件下载到您所在的随机数生成的文件夹中。现在,您可以将文件提供给最终用户。

简单!将秘密URL存储在数据库表中,并改为按ID引用它们

设置新的控制器操作,如下所示:

public ContentResult ShowNewspaper(long Id) {
    var mySecretURL = db.SecretURLs.Where(k=>k.Id == Id).FirstOrDefault(); // Grab URL entry the database
    string htmlCode = "";
    if(mySecretURL != null) {
         WebClient client = new WebClient();
         htmlCode = client.DownloadString(mySecretURL.URL);
    }else{
         htmlCode = "Page not found!";
    }
    return Content(htmlCode,"text/html");
}
所以现在如果你打电话:

mysite.com/Home/ShowNewspaper/5
这将在数据库中存储的URL处加载记录5的HTML

您还可以更进一步,通过检查推荐人,查看是否从您的站点调用了此控制器操作(而不是直接调用)

希望这有助于

编辑: 您也可以将“授权用户ID”存储在数据库记录中,并进行检查,以便仅当ID与当前登录的用户ID匹配时才可访问该ID,以防止未经授权访问此控制器操作,从而访问杂志。。。如果没有,则将其重定向到登录屏幕

return Redirect("/MyLoginURL");

发布[…]的文件路径将不安全。
任何模糊级别都不会撤消此操作。你可以阻止父母把链接发给他们的邻居,但是任何精通技术的人(基本上是40岁以下的人和一些40岁以上的人)都可以免费获得你的杂志。谢谢你的投入,但是所有其他在线出版网站都存在,他们似乎正在成功,所以一定有办法。太棒了。谢谢。我会检查一下,看看它是否有效。不过我想我在解释时犯了一个错误。当我说外部的时候,它实际上应该是“一个html文件,它不是解决方案的一部分,它只是被上传到项目中”。所以我不必从远程服务器上检索它,因为它位于我的服务器上。先生,你真是上帝派来的!我已经将“秘密URL”和用户ID保存到数据库中的一个表中,并在指向页面之前进行授权。我所需要的只是知道如何获取html并将其转储到浏览器中,而您已经将它交给了我!如果可以的话,我会给你买杯啤酒。太棒了-很高兴能帮你,伙计:)