隐藏控件作为网络安全的一种形式,建议更好?

时间:2010-01-18 17:08:38

标签: c# asp.net security

我正在一个网站(用C#开发的ASP.NET)上传递给我。当我在网站上工作时,我注意到网站中有很多类型的代码:

EmailLabel.Visible = false;
WhateverButton.Visible = false;
AnotherControl.Visible = false;
...

这通常都是在站点的代码隐藏中完成的(在Page_Load方法中)。本质上,这是为了防止未登录的用户访问组件(该站点的规则是未登录的用户在登录之前不应该看到该站点的任何部分)。上面的工作方式 ...但是,必须始终检查用户是否已登录然后翻转到所有这些组件的正确状态似乎相当昂贵。

是否有不同的方法可以解决这个问题。只是从思考它/研究,我想也许有一种方法,如果用户没有登录,我可以重定向回主页。更进一步,我可以扩展一个基页,这将为任何扩展基页的页面。但是,我在这方面的知识有限,所以我的建议可能无效。

可以提出什么建议?还有什么更好的?什么是足够好的?

3 个答案:

答案 0 :(得分:2)

我们在工作中做了很多。

我们实现这一目标的方法是创建一个继承自System.Web.UI.Page的BasePage类。然后重写OnInit,调用base.OnInit,并添加代码以检查登录用户。如果用户未登录,请将它们重定向到登录页面(不会从BasePage继承。)

然后,在每个需要保护的页面上,只需将页面更改为从BasePage继承。

与上面所说的相反,如果你写了Response.End();在重定向之后,即使继续处理页面的其余部分也要快得多!

希望有所帮助。

答案 1 :(得分:1)

有一个loginview组件,它是一个面板,具有匿名视图,经过身份验证的视图以及特定角色的视图。这样可以很容易地做到这一点。

http://www.creativeui.com/2007/10/05/net-membership-part-ii-loginview/

答案 2 :(得分:1)

发布重定向比在多个控件上设置Visible标志要贵很多很多个数量级。

如果您的页面允许匿名访问和登录访问,那么重定向还需要您以其他方式允许匿名访问,可能是通过构建页面的第二个版本。

费用问题实际上只是暂时的,它可能根本不重要。要回答您的主要问题,在不了解应用程序架构的情况下,我会认为这两件事都是不受欢迎的。将控件设置为Visible = false的优点是,不会将任何内容呈现给不可见控件的输出流,但它们仍然可以与服务器请求进行交互。

如果不了解您网页的要求,很难提出替代方案。正如其他人提到的,如果隐形控件根本不参与匿名用户,则LoginView可能会满足您的需求。