代码之家  ›  专栏  ›  技术社区  ›  JasCav

隐藏控件作为Web安全的一种形式,是否提供更好的建议?

  •  7
  • JasCav  · 技术社区  · 15 年前

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

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

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

    有没有其他方法可以解决这个问题?仅仅是考虑一下它/研究,我认为如果用户没有登录,也许有一种方法可以重定向回主页。更进一步,我可以扩展一个基本页,它可以为扩展基本页的任何页面执行此操作。然而,我在这方面的知识有限,所以我的建议可能行不通。

    有什么建议吗?有更好的吗?有什么足够好的吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   FallenAvatar    15 年前

    在我的工作中我们经常这样做。

    我们通过创建继承自system.web.ui.page的basepage类来实现这一点。然后重写oninit,调用base.oniit,并添加代码以检查登录用户。如果用户未登录,请将其重定向到登录页(该页不会从基页继承)。

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

    与上面Womp所说的相反,如果编写response.end();在重定向之后,继续处理页面的其余部分会更快!

    希望有帮助。

        2
  •  1
  •   Brian Mains    15 年前

    有一个LoginView组件,它是一个面板,具有匿名视图、已验证视图和特定角色的视图。这样做很容易。

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

        3
  •  1
  •   womp    15 年前

    发布一个重定向比在多个控件上设置可见标志要花费许多数量级的成本。

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

    不过,费用问题实际上只是一个旁白,可能根本不重要。为了回答你的主要问题,在不了解更多关于你的应用架构的情况下,我会认为这两件事都是不可取的。将控件设置为visible=false的好处是,对于不可见的控件,没有任何内容呈现给输出流,但它们仍然可以与服务器请求交互。

    如果不了解更多关于页面需求的信息,就很难提出替代方案。正如其他人提到的,如果不可见的控件根本不与匿名用户一起参与,则LoginView可能满足您的需要。