富文本编辑器从外链抓图时为什么要拦内网地址和超大文件
富文本编辑器的「从链接导入图片」看起来只是替浏览器多下载一次文件,实际上发起请求的是服务器。这决定了它必须拦内网地址、设连接超时与大小上限:一旦由服务端去取任意外链,编辑器的使用者就获得了一个能从服务器内部发起请求的通道。
谁在发起这次请求
浏览器加载图片时,请求来自访问者的设备,能到达的范围受访问者网络限制。远程抓图不同:站点把用户提交的链接交给服务端去取,取回后再存进媒体库。服务端所在的网络里通常有数据库管理入口、内部接口与元数据服务,这些地址对公网用户本来不可达,却在这一步变成可请求的目标。
同类问题在同行系统里有明确记录。PbootCMS 的更新日志(V3.2.25,2026-09-08)写明为编辑器的远程抓图加固了服务端请求防护,新增连接超时、大小上限、域名重绑定防护与内网地址拦截。这四件事分别对应四类后果,缺一项都会留下缺口。
内网地址为什么危险
拦内网地址不是防访问慢,是防信息暴露。请求打到内部服务后,返回内容可能被直接写进图片字段并在前台展示,或者通过错误信息回显出来,这两种路径都够把内部结构泄露出去。
拦截必须按解析后的地址判断,而不是只看字符串。域名形式写法的地址在检查时是公网 IP,真正连接时又解析到内网,这就是域名重绑定要专门防的原因。正确的顺序是解析、校验、再按已校验的地址建立连接,中间不留二次解析的机会。
超时与大小上限挡什么
| 收口项 | 挡住的后果 | 出错时的表现 |
|---|---|---|
| 连接超时 | 目标不可达时线程长时间挂起 | 请求排队,站点响应变慢 |
| 读取超时 | 慢速目标把连接占住 | 并发能力被少量任务耗尽 |
| 大小上限 | 超大文件占满存储与带宽 | 磁盘写满,备份体积失控 |
| 类型与内容校验 | 非图片内容被当图片存储 | 后续处理链上出问题 |
没有大小上限时,一个几百兆的文件就足以把媒体目录填满;而填满之后最先出问题的是备份,备份体积和恢复时间都会一起恶化,恢复窗口也随之变长。
站内采集功能的同类收口
内容采集做的是同一类事:由服务端去取外部页面的内容。因此它面对的是同一组收口——目标地址范围、超时、体积,以及取回之后是否入库。区别只在结果落在哪:抓图落在媒体库,采集落在文档列表。
站内配置时建议按三条固定:采集与抓图使用同一份地址校验规则,不各写一套;采集到的内容进入待审状态,由内容审核环节决定是否正式发布,入库文本仍要过敏感词过滤,避免外部页面把垃圾词与脚本片段一起带进来;取回的文件按大小上限先拒后存。这样做的额外好处是出问题时只需要改一处规则。
常见问题
问:把抓图功能只开放给管理员行不行? 能缩小触发面,但改变不了请求从服务端发起这一事实,管理员误用或被钓鱼时同样暴露内部地址。
问:设了上限为什么还要超时? 上限管体积,超时管时间。一个持续缓慢发送数据的响应可以永远不到上限。
问:内网段清单要维护吗? 要,并且要覆盖本地回环、链路本地与元数据地址段,只写常见的私有网段是不够的。