2

我搜索了 Google 和 SO 帖子,但找不到任何解决我问题的结果。

我的 web.config 是:

<location path="~/reports/PayPeriodQtrReport.aspx, ~/reports/PayPeriodDetailReport.aspx">
  <system.web>
    <authorization>
      <allow roles="PayrollReports"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

<location path="~/reports/ManifestAnnualReport.aspx, ~/reports/ManifestDetailedReport.aspx">
  <system.web>
    <authorization>
      <allow roles="ManifestReports"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>  

授权按要求工作(意味着具有“PayrollReports”角色的人无法在菜单项中看到 Manifest Reports,而具有“ManifestReports”角色的人无法在菜单项中看到 Payroll Reports)。

问题:
作为具有“PayrollReports”角色的用户,我可以输入我的网址 http:\\mysite.com\reports\ManifestDetailedReport.aspx并显示页面。应该显示的是未授权访问.aspx

同样,作为具有“ManifestReports”角色的用户,我可以输入我的网址http:\\mysite.com\reports\PayPeriodQtrReport.aspx并显示页面。应该显示的是未授权访问.aspx

问题: 使用 web.config,如何防止用户通过输入 url 来入侵页面?

4

1 回答 1

5

您需要将每个文件放在它自己的location条目中并删除~/

<location path="reports/PayPeriodQtrReport.aspx">
  <system.web>
    <authorization>
      <allow roles="PayrollReports"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

ETC...

这假设您使用的是 RoleProvider。您正在使用内置的 RoleProvider,或者您使用的是继承自RoleProviderweb.config 并在 web.config 中正确指定的自定义 RoleProvider。

于 2013-03-22T20:19:25.317 回答