正如我们所说,Web应用授权的最低要求由ACL提供,特别是文件系统ACL(但是我们将在下面的讨论中介绍其他对象,如HTTP方法上的ACL)。在这个小节中,我们将描述Web ACL配置的最佳实践,然后讨论如何在两个流行的Web平台——Apache和IIS上配置ACL。
Apache授权
Apache Web服务器有两条不同的控制用户访问指定URL的指令。Directory指令用于基于文件路径的访问控制。例如,下面的指令集限制对/admin URL的访问。只有处于Admin组的有效用户可以访问这个目录。注意,密码和分组文件不存储于文档根目录下。
<Directory /var/www/htdocs/admin> AuthType Digest AuthName "Admin Interface" AuthUserFile /etc/apache/passwd/users AuthGroupFile /etc/apache/passwd/groups Require group admin </Directory>
你也可以限制访问某些HTTP命令。例如,HTTP和WebDAV支持多个命令:GET、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK和UNLOCK。WebDAV命令提供网站内容远程管理的一种方法。
即使你对某些目录允许WebDAV,也可以使用Limit指令控制这些命令。例如,仅允许用户页面的GET和POST请求:
<Directory /var/www/htdocs> Options -MultiViews -Indexes -Includes Limit GET POST Order allow,deny Allow from all /Limit </Directory>
这样,用户在请求/htdocs目录中的页面时仅能使用GET和POST命令。HEAD命令被当作GET。现在,如果你希望为特定目录启用WebDAV选项,可以按照如下的设置:
<Directory /var/www/htdocs/articles/preview> AuthType Digest AuthName "Author Site" AuthUserFile /etc/apache/passwd/users AuthGroupFile /etc/apache/passwd/groups Limit GET POST PUT CONNECT PROPFIND COPY LOCK UNLOCK Require group author /Limit </Directory>
我们没有允许所有WebDAV选项可用,但是应该足以让希望访问Web应用这个部分的author组用户使用。
Location指令用于基于URL的访问控制,它不要求特定的文件位置:
<Location /member-area> AuthType Digest AuthName "My Application" AuthUserFile /etc/apache/passwd/users AuthGroupFile /etc/apache/passwd/groups Require valid-user </Location>
<Directory>标记中允许的任何指令对<Location>标记都有效。
IIS授权
从IIS 7开始,Microsoft在标准的Windows文件系统权限界面下统一了IIS文件授权设置。而且,他们统一了IIS_IUSRS组的标准权限,这个组现在是运行于任何应用池中的应用访问资源的默认标识。要配置IIS下Web目录和文件的访问控制,打开IIS管理器工具(开始|运行|inetmgr),找到你希望加强安全的网站、应用或者虚拟目录,右键点击Edit Permissions(编辑权限)……在IIS 7上,这会显示图5-11所示的界面,表明为IIS_IUSRS组应用了内建的默认网站的默认安全性。
图5-11 配置IIS 7目录安全
警告 避免允许Web用户写入内容。如果这么做,不要给用户可写入的目录执行或者脚本权限,以避免上传和执行恶意的代码,这一点尤为重要。
除了文件授权之外,Microsoft还通过web.config文件的system.web/authorization段支持URL授权(在集成管道模式下,IIS 7使用system.web/authorization段)。这个机制非常近似于前面描述的Apache授权机制,使用结构化的文本串定义实体对资源的访问级别。本章结尾处的“参考与延伸阅读”中可以找到关于在各种场景中使用web.config配置授权的教程,包括IIS 7和ASP.NET URL授权行为之间的细微差异。
IP地址授权: 尽管我们通常不建议,但是IIS也允许基于IP地址的访问控制。配置可以通过网站的“编辑绑定”功能访问。这在只允许特定地址、子网或者DNS名访问一个管理目录时可能有用。对于面向互联网的应用不鼓励这种做法,因为顺序的请求不能保证来自相同的IP地址,而多个用户可以来自相同的IP地址(想想集团网络就是如此)。