问题描述:

http://www.qq.com/downloadFloder/12345.doc

IIS + asp.net 下,如果用户知道上面的文件路径,就可以直接下载doc类型的附件。

 

实现方法:

大概说说,默认情况下,IIS + asp.net是两层分别处理,
1)如果用户请求*.doc,*.txt的文件,IIS 直接返回结果给用户。
2)如果用户请求*.aspx,IIS将处理转交给asp.net。

而我们的form验证是在asp.net层的,如果控制*.doc安全话,就让IIS把*.doc文件的处理交给asp.net,就是在IIS属性配置映射。

配置:

1)IIS6站点->属性->主目录 ->应用程序设置 配置->添加映射 

可执行文件:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll

扩展名:.doc

动作: 全部 或者 限制为GET,HEAD,POST,DEBUG

2)在web.config 中配置

<httpHandlers>
<add verb="*" path="*.doc" type="System.Web.StaticFileHandler" />
</httpHandlers>

3)在下载目录downloadFolder配置web.config 限制非验证用户

<?xml version="1.0"?>
<configuration>
 <system.web>
  <authorization>
    <deny users="?"/>
  </authorization>
 </system.web>
</configuration>

 

如果进一步对权限进行控制,则可以自己写个类代替System.Web.StaticFileHandler接管文件的处理。