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

时间:2013-05-10 09:00:08

标签: c# asp.net-mvc file security

我正在开发一个在线出版订阅网站。我是在ASP.NET MVC 1中开发的。

基本上,用户购买杂志或报纸,并且他们可以获得该出版物的路径。但是,捕获22是,它们不允许查看发布的文件路径,因为这将是不安全的。

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

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

如果有人建议以安全的方式检索html文件并在浏览器中显示,那么任何帮助都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:1)

轻松!将您的秘密URL存储在数据库表中,然后通过ID引用它们。

按如下方式设置新的Controller操作:

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中加载HTML以进行记录5

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

希望这会有所帮助......

编辑: 您也可以将“授权用户ID”存储在数据库记录中,并检查以便只有在ID与当前登录的用户ID匹配时才能访问它,以防止未经授权访问此控制器操作,从而防止杂志...如果没有,请使用

将其重定向到登录屏幕
return Redirect("/MyLoginURL");

答案 1 :(得分:0)

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