我们在地址栏输入的 Url 不能被接受
The Url where we type in address bar must not be accepted
你好,我非常需要你的帮助。我们在 asp.net(C#) 中制作了一个基于角色 ID 的应用程序,其中菜单根据他的角色显示。这很好,现在用户正在尝试直接在地址栏中键入 link 并使用它们。不能在页面加载和会话中限制它们,因为这是一个已经很慢的生产站点。所以我的意图是以加密格式显示 url ,该格式在用户无法复制和粘贴的特定时间过期。有什么办法...
检查 page_load 事件中的用户角色,如果用户没有权限,则将他重定向到显示权限被拒绝的页面。
如果您需要进一步的帮助,请提供代码。
Cant restrict them in page loads and sessions as this is a production site which
is already slow.
修复糟糕的代码和/或添加更多服务器。因为这是唯一有意义的方式。任何其他安全措施都会遭到破坏,然后你 运行 就会指责这个世界不公平。
So my intension is to show the url in encrypted format which expires in certain
time where the user cant copy and paste it.
?所以菜单有一个加密的 URL 只有效半秒?如果用户浏览页面的源代码怎么办?他可以在那里看到所有的来源。
这不是安全,这是废话。抱歉,直言不讳,但这行不通,你在这里做得很糟糕。
在页面加载中检查此项将花费不到一毫秒的时间(假设您在会话中缓存角色)。少得多。
是的....你把自己逼到了一个角落。
简答:
不,没有干净的方法来执行此操作,您创建的任何类型的 'special' url 实现都将对 abuse/spoofing 开放,并且仍然需要您添加代码。
长答案:
除了将一些代码注入 Page_Load
之外,我看不到任何可行的解决方案。
我认为您没有使用 WIF/Claims-based 安全性,只是一些定制的书面用户登录、基于数据库存储的代码?所以你最好的方法(此时)是在App_Code
中做一个简单的class:当用户登录时,将他们的权限加载到类似DataTable
并将其存储在会话变量中。这样你就可以避免每次页面 loads/posts 返回时都进行数据库请求,这也可能会加快你的网站速度。
在 class 中构建一个非静态方法,将在 Page_Load
上使用,这将获取正在访问的 URL(或页面 ID),然后检查针对会话存储 DataTable
。如果检查失败,将他们重定向到拒绝访问的页面。
建立 class 基础是关键,不要尝试将代码块快捷方式复制粘贴到每个页面中。使用 'security' class 您可以标准化您的代码并将测试减少到几个简单的检查。
你好,我非常需要你的帮助。我们在 asp.net(C#) 中制作了一个基于角色 ID 的应用程序,其中菜单根据他的角色显示。这很好,现在用户正在尝试直接在地址栏中键入 link 并使用它们。不能在页面加载和会话中限制它们,因为这是一个已经很慢的生产站点。所以我的意图是以加密格式显示 url ,该格式在用户无法复制和粘贴的特定时间过期。有什么办法...
检查 page_load 事件中的用户角色,如果用户没有权限,则将他重定向到显示权限被拒绝的页面。 如果您需要进一步的帮助,请提供代码。
Cant restrict them in page loads and sessions as this is a production site which is already slow.
修复糟糕的代码和/或添加更多服务器。因为这是唯一有意义的方式。任何其他安全措施都会遭到破坏,然后你 运行 就会指责这个世界不公平。
So my intension is to show the url in encrypted format which expires in certain time where the user cant copy and paste it.
?所以菜单有一个加密的 URL 只有效半秒?如果用户浏览页面的源代码怎么办?他可以在那里看到所有的来源。
这不是安全,这是废话。抱歉,直言不讳,但这行不通,你在这里做得很糟糕。
在页面加载中检查此项将花费不到一毫秒的时间(假设您在会话中缓存角色)。少得多。
是的....你把自己逼到了一个角落。
简答:
不,没有干净的方法来执行此操作,您创建的任何类型的 'special' url 实现都将对 abuse/spoofing 开放,并且仍然需要您添加代码。
长答案:
除了将一些代码注入 Page_Load
之外,我看不到任何可行的解决方案。
我认为您没有使用 WIF/Claims-based 安全性,只是一些定制的书面用户登录、基于数据库存储的代码?所以你最好的方法(此时)是在App_Code
中做一个简单的class:当用户登录时,将他们的权限加载到类似DataTable
并将其存储在会话变量中。这样你就可以避免每次页面 loads/posts 返回时都进行数据库请求,这也可能会加快你的网站速度。
在 class 中构建一个非静态方法,将在 Page_Load
上使用,这将获取正在访问的 URL(或页面 ID),然后检查针对会话存储 DataTable
。如果检查失败,将他们重定向到拒绝访问的页面。
建立 class 基础是关键,不要尝试将代码块快捷方式复制粘贴到每个页面中。使用 'security' class 您可以标准化您的代码并将测试减少到几个简单的检查。