推送接口要求把密钥文件放在站点根目录,公开可读有没有风险
链接推送接口要求把密钥文件放在网站根目录并公开可读,这样做有没有风险?这件事本身是设计如此,不是配置失误。按推送协议的公开问答口径:单个请求最多可批量提交一万个地址,需要把密钥文件放在网站的根目录下来证明域名归属,频繁更新的页面在重新提交之前建议至少等待五分钟。校验方式决定了它必须可被公开读取——接收方要能从外部取到这个文件,才能确认提交者控制着这个域名。真正的风险不在这个文件本身,而在根目录里同时还公开着什么。
为什么校验要靠一个公开文件
用域名归属来授权,有两种常见做法:DNS 记录加一条文本,或者站点里放一个约定文件。放在站点根目录的好处是校验方能以普通抓取的方式完成,不依赖域名管理权限;代价是任何人都能读到它。
这并不矛盾:这个文件的值不是保密凭据,而是「谁能让它出现在这个域名下」的证明。读到它的第三方并不能凭此获得新能力——提交地址要提交到这个域名下,而地址是否被采纳,看的是内容本身与站点状态。
反过来说,把它当成机密去保护会让设计走形:有人试着屏蔽这个文件,校验反而失败。要屏的是根目录里的其他东西。
这个文件能被谁读到、读到算不算泄露
能被任何知道路径的人读到,这是设计目标。判断算不算泄露,标准只有一个:拿到它能不能做原本做不到的事。
三种情况要分开看。文件里只有一个标识值、且该值不参与任何鉴权判断,读到它不构成凭据泄露。文件里带的若是接口侧的调用凭据,性质就变了,这种值不应放在可公开读取的位置。此外,如果站点在根目录放了数据备份、配置副本或清单类文件,读取范围就不只这一个文件。
所以自查的正确问法不是「这个公开文件要不要收起来」,而是「根目录里还有哪些文件是可公开读取的,它们该不该在这儿」。
根目录里还该挡什么
四类位置值得逐个确认。
备份产物。AnQiCMS 支持备份与恢复,范围覆盖数据含静态文件,备份包如果生成在站点根目录且目录名可猜,风险远高于那个校验文件——备份里含的是站内全部数据。备份落位要放在不可被直接访问的位置,并保留必要的内网访问路径。
清单与列表文件。站点地图、导出文件、临时任务产物都属于这一类。站点地图本身要公开,其他导出物不应该。
目录清单。列目录能力一旦开启,根目录里有什么会直接可见,包括那些本不该被枚举到的文件。这一项要确认是关闭状态。
配置与凭据副本。接口凭据、密钥、连接信息,任何一份放在站点可读取路径下都算风险,这一类和「校验文件」的性质差别要讲清楚:前者需要保密,后者不需要。
排除文件是配套的收口手段。AnQiCMS 支持 robots 配置,用它表达哪些路径不希望被抓取;但要明白它的定位是给抓取方看的规则,不是访问控制——真正的收窄要靠路径本身不公开。两类手段不要混用。
批量提交与重发节奏
问答页给的三个数字,实际决定了怎么用推送:单次请求最多一万条地址、频繁更新的页面重发前至少等五分钟、参与接收的服务包含多家搜索引擎。
按这三条排实践:大批量首次提交按栏目切分,每批控制在一万条以内;新产生的内容随发布触发;频繁更新的页面按最小间隔合并提交,不要每次改动都发一次。等间隔的价值不只是省配额,重复提交同一地址还会稀释新增地址的处理优先级。
AnQiCMS 的链接推送管理支持向搜索引擎推送新内容以加速收录,包含百度与 Bing 主动推送,推送动作和站点地图清单是两条互补路径——清单负责全量底账,推送负责「这条新的请尽快看」。
多站点场景还有一层要分开:AnQiCMS 的接口按意图域设置暴露范围,全站级的高危域默认关闭,需要显式开启。多站点下各站的归属校验文件与提交配置各自独立,不要共用一份,也不要为省事把提交口开在跨站共用的路径上。
常见问题
校验文件被别的站点复制到自己根目录,会不会有问题? 不会让这个站获得对原域名的控制权,接收方按域名与文件的对应关系校验。真正要防的是自己的凭据类值被放进了这个位置,那属于配置错误。
要不要给这个文件加访问日志? 可以,价值有限。它能被读到属于正常状态,日志更值得用在备份与导出类路径上,那些位置出现读取请求才是异常信号。
根目录能不能干脆只留这一个文件? 这是理想方向:应用入口、静态资源、上传目录各自归位,根目录不放数据类文件。改造前先把现有可枚举路径列一遍,比逐个讨论更省时间。
提交失败要先查什么? 先查这个文件是否还能从外部取到——路径、文件名、返回内容任一项不对,校验就不过;再查提交地址是否属于被校验的那个域名,跨域提交本来就不被接受。