当我使用<a href="">

时间:2016-07-04 08:19:58

标签: javascript jquery asp.net angularjs asp.net-mvc

I have several documents stored in a folder in a project using ASP MVC 5. The HTML link to see the document is:

<a ng-href="~/download/document/{{vm.document}}"><a/>

Then this URL will see it in adress bar: http://localhost:20870/download/document/d47a1c96-e4d7-423b-aa83-76537c392ad2.pdf

For safety I do not want this URL is visible!

3 个答案:

答案 0 :(得分:1)

正如其他人所指出的,网址是公开的。没有合理的方法可以将它们完全隐藏起来。

但是,您可以使用MVC来控制对资源的访问,例如物理文件。

默认情况下,MVC不提供物理文件,IIS直接为它们提供服务。假设您的文件实际位于/download/document/虚拟目录中,请首先阻止通过根web.config文件直接访问该文件夹。

<location path="download/document">
    <system.web>
        <authorization>
            <deny users="*" />
        </authorization>
    </system.web>
</location>

这可以确保没有用户(无论是否登录)可以直接通过IIS访问该文件。

然后,您可以将控制器操作方法与[Authorize]属性结合使用,以控制谁有权访问该文件。

public class SecureDownloadController : Controller
{
    [Authorize]
    public ActionResult Document(string id)
    {
        return File(@"D:\wwwroot\documents\download\" + id, "application/pdf");
    }
}

以上内容将允许任何登录用户访问URL http://localhost:20870/securedownload/document/d47a1c96-e4d7-423b-aa83-76537c392ad2.pdf上的文件。

  

重要提示:切勿在网址中使用真实位置。 IIS将支持MVC控制器操作的物理位置,因此如果物理文件存在,您将收到错误。您可能不希望用户知道文件的物理位置。

您可以使用以下方法将其进一步限制为特定的用户角色:

[Authorize(Roles = "Admin,SuperUser")]

或者,您可以继承[Authorize]属性并使用其他方式来保护文件,例如,通过HTTP标头传递哈希代码。

另一种可能的替代方法:Generate the PDF as a stream而不是使用磁盘上持久存储的物理文件。这确保了没有可以访问文件的物理路径 - 它只能通过控制器操作方法访问。它还确保您永远不必清理一次性使用PDF文件的目录。

参考文献:

答案 1 :(得分:0)

亲爱的网址隐藏不会有利,因为我们可以通过在网络标签上按F12来了解请求的详细信息。

enter image description here

以更好的方式保护您的文档。我认为基于角色的安全性很好,并且根据请求提供对文档的访问权。

答案 2 :(得分:-1)

你应该使用这个

<a href="javascript:void(0)" onclick="location.href='" . $ajax_like_link . "'">Link</a>