禁止IIS服务器上的目录浏览
一台Windows Server开着IIS,禁止网站跑得好好的目录,某天你随手在浏览器地址栏敲了个目录路径,浏览结果整个文件夹结构赤裸裸地列在页面上——所有文件、禁止子目录、目录甚至备份文件,浏览一览无余。禁止这不是目录什么漏洞利用,这是浏览IIS默认行为。Directory Browsing,禁止中文叫目录浏览,目录IIS装完就给你开着。浏览
很多人不知道这事。禁止直到某天安全扫描报告甩到脸上,目录或者更糟——搜索引擎把目录列表页给收录了。浏览
IIS为什么默认开这个
早期Web服务器的设计思路是方便。没有index文件的时候,服务器总得给用户看点什么吧?那就把目录里的东西列出来。Apache当年也这么干,Nginx稍微好一点但配置不当同样会暴露。IIS从5.0到10.0,这个特性一直在,默认状态取决于版本和安装选项。Windows Server 2016之后的IIS 10,默认站点里Directory Browsing是禁用的,但如果你手动加站点、或者从旧服务器迁移配置,很容易把它带进来。
我见过一个案例:某公司的内网文件服务器用IIS搭的,IT图省事直接开了目录浏览当简易网盘用。结果外网能访问到内网穿透出来的端口,整个公司的人事档案、财务报表的文件夹名字全挂在上面。文件名本身就泄露了大量信息——“2023年Q4裁员名单.xlsx”这种,不需要点开就已经够要命了。
关掉它,两种方式
图形界面操作最直接。打开IIS管理器,左侧点中你的站点,中间功能区找到“目录浏览”图标,双击,右侧操作栏点“禁用”。完事。就这么简单。
命令行适合批量处理或者写进自动化脚本。管理员权限开CMD或者PowerShell:
%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:directoryBrowse -enabled:false 如果要全局禁用,把"Default Web Site"换成空或者直接不加站点名,作用于applicationHost.config级别。web.config里也可以写:
<system.webServer> <directoryBrowse enabled="false" /> </system.webServer> 注意,web.config的优先级高于applicationHost.config,如果某个子目录的web.config里显式开了,上级禁用也压不住。所以检查的时候要沿着目录树往下看。
关了之后会怎样
用户访问一个没有默认文档的目录时,IIS返回403.14错误——Forbidden。页面不好看,但安全。你可以自定义这个错误页,跳转到首页或者一个友好的提示页面。总比把文件列表摊开强。
有个细节:即使禁用了目录浏览,如果目录里存在web.config且配置了<directoryBrowse enabled="true" />,照样会列出来。所以禁用操作要配合权限检查一起做。另外,web.config本身如果被下载了,里面的连接字符串、认证信息全暴露。IIS默认会拦截.config文件的直接访问,但如果你改过handler映射,就不好说了。
顺手检查这几项
关目录浏览只是基本操作。同一位置附近还有几个开关值得看一眼:HTTP响应头里别带X-Powered-By,请求筛选里禁止可疑扩展名,错误页别把详细堆栈信息返回给客户端。这些和目录浏览一样,属于“默认配置不一定安全”的范畴。
我自己的习惯是,新装一台IIS,第一件事就是把这些默认开着的、可能泄露信息的功能全过一遍。花不了十分钟,省得日后提心吊胆。服务器安全这事,从来都是细节堆出来的。
(责任编辑:综合)














