保护未定义成员资格角色的Web文件夹

时间:2014-04-04 20:06:58

标签: c# asp.net security directory membership

我们的网站托管在共享服务器上。我们有一个独立于任何会员角色的登录模块。我们还没有使用过这个功能。我们的登录数据库表只有电子邮件ID和pwd字段。 我们的一个文件夹(常规)包含敏感文档:pdf; JPG;我们不希望未经授权的用户以及谷歌,雅虎和其他搜索引擎访问此文件夹。 我们在网络配置中添加了以下行

<location path="General" allowOverride="true">
<system.web>
  <authorization>
    <allow roles="Administrators" />
    <deny users="*" />
  </authorization>
</system.web>
   </location>

Web配置中的此更改已保护文件夹,因为访问文件夹会导致权限被拒绝消息等。但是,现在我们希望我们的登录用户能够访问此文件夹。我们尝试为登录用户添加以下行:  Roles.CreateRole(&#34;管理员&#34); 但是,这会导致错误;似乎asp.net正在尝试创建成员资格表,但无法。 是否可以通过完全忽略成员资格部分来强制为用户分配角色?

我们没有使用sqlaspent表,也没有计划使用它。 我们也没有使用ASP.NET Membership框架。

原始问题重新构建:(允许角色=&#34;管理员&#34;从网络配置中删除行)

<location path="General" allowOverride="true">
    <system.web>
      <authorization>
              <deny users="*" />
      </authorization>
    </system.web>
       </location>

Web配置中的上述更改导致“常规”文件夹中所有文件的“拒绝访问”。是否有可能(1)在运行时修改Web配置并更改拒绝用户以允许用户在general / test.aspx页面加载部分或(2)从不同的文件夹加载不同的web配置/ test.aspx页面加载?

3 个答案:

答案 0 :(得分:0)

这听起来像是数据库连接问题。您的远程提供商允许远程连接到您的数据库?可以使用SQL Server Management Studio连接到它吗?

某些共享托管服务提供商不允许远程访问SQL Server。

答案 1 :(得分:0)

您是否已将sqlaspent表安装到数据库中?

如果不需要使用Aspnet SQl Server Registration Tool,请在数据库中创建正确的结构表(已存储哪些角色)。

像管理员,Jojom,Angelina Jolie或者您喜欢的自己的财产一样创建一个成员资格用户 创建默认角色(客户,管理员等)

将用户绑定到成员身份,然后您就可以使用授权规则。

你的方法只对aspnet说只有通过Context.User.IsInRole(&#34;管理员&#34;)可访问的管理员成员才能访问这个页面....但要成为管理员你需要成为存储在数据库或自定义提供程序中......

答案 2 :(得分:0)

我不知道在不使用成员资格提供程序的情况下为用户分配角色的方法。我能想到的一件事是,放弃web配置中的位置扇区,并使用Global.asax Application_BeginRequest方法开始监视应用程序的每个请求,并检查请求是否发送到受限文件夹以及用户是否已进入(会话) )。

另一种方法是使用某种httpHandler来进行保存。

修改 在您的登录表单中,一旦用户通过其用户名和密码进行身份验证,就会分配一个会话变量,该变量会指出该用户是Administartor。

void Login()
{
    //check user+password
    //...
    if(UserIsAuthenticated)
    {
        Session["Administrator"] = true;
        //more stuff to do with authenticate user
    }
}

并在您的Global.asax中:

void Application_BeginRequest(object sender, EventArgs e)
{
    if(Request.PhysicalPath.Contains("RestrictedFolderName")//you can do a more profound check here
    {
         if((bool)Session["Administrator"])
             //all ok - do nothing
         else
             //not authorized user trying to access folder- do redirect or somthing 
    }
}