【问题标题】:The Url where we type in address bar must not be accepted我们在地址栏中输入的 Url 一定不能被接受
【发布时间】:2016-03-31 06:29:06
【问题描述】:

大家好,我非常需要你们的帮助。我们在 asp.net(C#) 中创建了一个角色、基于 ID 的应用程序,其中菜单按照他的角色显示。这很好,现在用户正在尝试直接在地址栏中键入链接并使用它们。不能在页面加载和会话中限制它们,因为这是一个已经很慢的生产站点。所以我的意图是以加密格式显示网址,该网址在用户无法复制和粘贴的特定时间到期。有没有什么办法...

【问题讨论】:

  • 请帮帮我,我急需
  • 是的。你的方法被打破了。修复缓慢的代码,以便您可以正确执行。

标签: c# asp.net .net c#-3.0


【解决方案1】:

不能在页面加载和会话中限制它们,因为这是一个生产站点 已经很慢了。

修复糟糕的代码和/或添加更多服务器。因为这是唯一有意义的方法。其他任何类型的安全措施都会被攻破,然后你到处指责世界不公平。

所以我的意图是以加密格式显示在某些情况下过期的 url 用户无法复制粘贴的时间。

?所以菜单有一个加密的 URL,它只在半秒内有效?如果用户浏览页面的源代码怎么办?他可以看到那里的所有来源。

这不是安全,这是废话。很抱歉直言不讳,但这行不通,而且你在这里做得不好。

在页面加载中检查这一点将花费不到一毫秒的时间(假设您在会话中缓存角色)。少得多。

【讨论】:

    【解决方案2】:

    在 page_load 事件中检查用户角色,如果用户没有权限,则将他重定向到显示权限被拒绝的页面。 如果您需要进一步的帮助,请提供代码。

    【讨论】:

      【解决方案3】:

      是的....你把自己画到了一个角落里。

      简答:

      不,没有干净的方法可以做到这一点,并且您创建的任何类型的“特殊”网址实现都可能被滥用/欺骗,并且仍然需要您添加代码。

      长答案:

      除了将一些代码注入Page_Load 之外,我看不到任何可行的解决方案。

      我认为您没有使用基于 WIF/Claims 的安全性,只是一些定制的书面用户登录、基于数据库存储的代码?所以你最好的方法(此时)是在App_Code 中创建一个简单的类:当用户登录时,将他们的权限加载到DataTable 之类的东西中,并将其存储在会话变量中.这样您就可以避免每次页面加载/回发时都进行数据库请求,这可能也会加快您的网站速度。

      在要在 Page_Load 上使用的类中构建一个非静态方法,这将获取正在访问的 URL(或页面 ID),然后对照存储的会话检查 DataTable。如果该检查失败,则将他们重定向到拒绝访问页面。

      建立类基础是关键,不要试图将代码块复制粘贴到每个页面中。使用“安全”类,您可以标准化您的代码并将测试减少到几个简单的检查。

      【讨论】:

        猜你喜欢
        • 2018-12-19
        • 2021-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 2018-05-13
        相关资源
        最近更新 更多