asp 页 VB.NET 中的授权问题

Authorization issues in asp page VB.NET

我正在尝试验证 asp.net 应用程序,我的 web.config 设置允许访问登录页面 首先 ,然后之后拒绝所有未经授权的用户访问。知道 asp 自上而下评估,我认为通过将我的 allow 语句放在顶部,它会在尝试进行身份验证时首先命中那个,但事实并非如此。当我允许访问所有页面时,我可以让应用程序按需要工作,然后拒绝我不想公开的页面。这行得通......但是它在扩展时非常麻烦并且添加了很多很多页面。

  <!--allow login access-->
  <location path="login.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>



  <!--deny access to everything else-->
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>

有什么帮助吗?我知道一切都应该转移到 MVC,但我必须尽快完成这个项目,而且学得不够快。

嗯,每个 web.config 设置安全性的文件都必须在每个文件夹中。

例如,您显示了两个网络配置文件 - 但它们在哪里才是关键问题。

因此,如果您有一个基本的欢迎页面或其他内容,那很好(在根目录中)。

一般来说,您的根文件夹不会(也不应该受到保护)。

那么您可能有一个帐户文件夹(这是您的登录页面所在的位置。

同样,无法保护或限制该帐户文件夹,因为用户将如何登录您的站点?

因此,您 need/want/have 保护一个页面是非常罕见的。

然而,一个很好的例子是,如果您创建了一个默认站点,那么您将拥有:

因此,请注意我们如何拥有“帐户”文件夹。这有您的登录页面、您忘记的密码(可能)等。

好吧,那么上面的文件夹在上面的“accounts”文件夹中有一个 web 配置。

但是,该文件夹中有一页名为“manage.aspx”。该页面允许用户更改密码。我们不希望 non-logged 用户点击该页面,除非他们已登录。因此帐户文件夹的 Web 配置是这样的:

<?xml version="1.0"?>
<configuration>

  <location path="Manage.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

</configuration>

因此,我们仅针对“管理”页面拒绝“匿名”用户。

但是,对于默认页面和主根,我们当然允许用户 hit/see 页面。 (此外,谁想弄乱具有大量设置的巨大主 web.config 页面。

但是,对于网站的其余部分,每个受保护的部分和网页都应放在文件夹中。

例如,我有一些“管理员”用户或网站管理员用户。所以,我创建了一个名为 SiteAdmin 的文件夹。

像这样:

如您所见,它具有诸如每日或站点消息设置的“消息”之类的内容。因此只有站点管理员用户可以使用这些页面。

因此,我的网络配置是这样的:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>

    <authorization>
            <allow roles="SiteAdmin" />
        <deny users="*" />
        </authorization>
    </system.web>
</configuration>

因此,只有属于 Sitedmin 组(角色)的人才能使用这些页面。

如果你往上看,你会看到一个名为 Portal 的文件夹。这是给客户说他们的项目。查看 Portal 文件夹的安全性,此页面:

在上面我们有一个名为 MyProjects 的页面。因此只有登录的客户才能查看他们的项目。所以,我们只允许登录用户。 web.config 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
      <authorization>
            <allow roles="Portal" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>

因此,您必须是登录用户,同时也是“Portal”的成员。

所以,实际上,安全性并不复杂,而且我们很少需要将安全性应用于给定或单个 aspx 页面,因为我们按文件夹对页面和站点进行分组。

因此,我不建议您在“根”文件夹中放置太多内容 - 除了登陆页面。因此,您不需要、不想或必须为主根文件夹设置安全性。

但是,对于任何有用的东西,以及任何您想要(并具有)安全性的页面,它们都会进入子文件夹。目前尚不清楚您是要使用“角色”还是仅使用作为登录用户的事实。但是,即使在这种情况下,也可以将您想要登录用户的所有页面移动到一个子文件夹中。您可以将“所有内容”都放在一个文件夹中,但我怀疑主页和很多页面无论如何都会位于网站的根目录中,是吗?

那么,第一个站点级别?我不会保护它,但是话又说回来,您可能只有一些主页,之后,任何其他“有价值的页面”都将放在子文件夹中,您可以简单地按照说明保护每个页面中的任何和所有页面那些带有简单 web.config 的文件夹,如下所示:

 <deny users="?" />

所以,上面的意思是不允许“匿名”或不允许登录用户。

因此,作为一般规则,您的根目录中将包含非常简单的页面。事实上,将一大堆页面放在根目录中就像将您拥有的所有文档都放在“我的文档”中一样。您创建子文件夹来组织 MyDocuments,您应该为网站做同样的事情。

我不相信你可以在同一个文件夹中有超过一个 web.config,但无论如何我看不出有必要或理由。

因此,如果您希望您的页面受到保护,那么这在很大程度上是一个“既定”假设,即此类页面将被移出网站,而不是位于网站的根目录中。一旦完成,就可以使用一个简单的 Web 配置文件 deny users="?" (对于每个文件夹,您仍然会有一个 web.config 文件 - 但实际上没什么大不了的 - 为每个文件夹剪切并粘贴一个现有的 deny users="?" 文件,然后你完成了很多。

但是,我希望即使对于已登录的用户,您也需要进一步的安全性,并且如上所示,您希望为每个用户设置一些“角色”,因此再次按文件夹分组 - - 例如我的站点管理文件夹设置欢迎消息等

因此,如果您真的不想查看太多内容,请删除根目录中的页面。如果您保护子文件夹,并且 non-logged 用户尝试访问其中一个页面,则帐户文件夹中的登录页面将自动触发并显示。

因此,您的登录页面应该位于“帐户”文件夹中 - 以及其他一些页面,例如忘记密码或更改密码。

所以,简而言之,为了管理安全,你使用子文件夹,为了进一步管理,你想引入“角色”,这样即使登录的用户也可以有不同级别的安全。

假设您使用基本网站模板创建您的网站,那么您的所有登录帐户页面都会自动为您创建。你还应该 get/have 一个菜单栏(bootstrapp - 很好!!),因此有这样的东西:

所以,按照上面的方法开始使用基本模板和菜单栏。你可以看到它甚至在右侧显示了我的登录。

而我 show/hide 基于用户“角色”的菜单栏项目。所以,理论上你可以隐藏所有的菜单栏项目 - 删除它们,并且只有一个,甚至 none 在菜单栏中显示,除非他们已登录,因此他们将不得不导航到一些安全的页。事实上,当用户“登录”时?我 re-direct 用户到我的项目页面。

因此,在用户登录后,您可以将它们发送到任何您想要的地方,或者相当于登录用户可以看到的基本页面。