【问题标题】:How to hide URL in adress bar when I use <a href>使用 <a href> 时如何在地址栏中隐藏 URL
【发布时间】:2016-07-04 08:19:57
【问题描述】:

我在一个使用 ASP MVC 5 的项目中的一个文件夹中存储了几个文档。查看该文档的 HTML 链接是:

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

然后这个 URL 将在地址栏中看到它: http://localhost:20870/download/document/d47a1c96-e4d7-423b-aa83-76537c392ad2.pdf

为了安全,我不希望这个 URL 可见!

【问题讨论】:

  • 如果不在url中,则不会传递给方法!
  • 你可以把htaccess ignore放到你的文件夹里,这样没人能单独拿到
  • 要使下载工作,URL 必须是公开的。如果您想限制对文件的访问,那么听起来您需要使用令牌系统,在该系统中服务器读取提供的令牌并检查它是否有效,然后再重定向到要下载的文件。
  • 如果是出于安全考虑,用户可以随时查看页面源以找到秘密 URL。
  • 你的意思是当鼠标悬停时,pdf链接出现在底部的状态栏中?

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


【解决方案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 上的文件。

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

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

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

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

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

参考资料:

【讨论】:

    【解决方案2】:

    亲爱的url隐藏不会有好处,因为我们可以通过在network选项卡上按F12来了解请求的详细信息。

    以更好的方式保护您的文档。我认为基于角色的安全性会很好,并且对文档的访问取决于请求。

    【讨论】:

      【解决方案3】:

      你应该使用这个

      &lt;a href="javascript:void(0)" onclick="location.href='" . $ajax_like_link . "'"&gt;Link&lt;/a&gt;

      【讨论】:

        猜你喜欢
        • 2013-12-30
        • 2016-10-23
        • 1970-01-01
        • 2014-01-09
        • 2013-08-21
        • 2013-01-20
        • 1970-01-01
        • 2019-11-11
        • 2015-04-10
        相关资源
        最近更新 更多