把静态网站的公开访问收敛到最小:OBS 桶策略、防盗链与跨域的三处收口
静态网站看起来最简单,也最容易在公开访问上失手。一个桶、几十个页面、一些图片与脚本,一旦整桶设为公开读,就等于把所有历史文件、测试页和本不该外露的附件一起交给了互联网。本文不谈复杂架构,只做三处收口:对象前缀、桶策略条件与来源控制、防盗链与跨域配置,让公开的部分刚好够用。
一、公开读只给必要的对象前缀
先把桶里对象分开。公开的放进 site/ 或 public/ 这样的前缀,只读这些前缀;草稿、源文件、备份、内部文档不要放进同一个公开前缀。桶策略里不要写整桶的 GetObject 允许,资源写成对象前缀,例如只允许读取 site/*。这样即使有人猜到文件名,也拿不到前缀之外的对象。
二、桶策略按来源与条件再收一层
只给前缀还不够,条件要再收紧。公开读的动作只保留读取对象,不要顺带放开列举桶、上传或删除。来源条件可以根据业务加限制,写入、删除与修改桶策略的操作必须走身份认证,绝不能因为图方便放进匿名策略。每次改策略后立即用匿名方式验证,确认能读该读的、读不到不该读的,再上线。
三、防盗链:Referer 白名单要取舍
开启防盗链后,只把自己的域名、测试域名与必要的合作域名放进白名单。空 Referer 要单独想清楚:直接打开链接、部分浏览器与客户端可能不带 Referer,全部拦截会影响正常访问,全部放行又会留一个口子。常见做法是公开页面允许空 Referer,但图片与大文件目录严格校验;上线前用非白名单域名做一次引用测试,确认返回拒绝,再放行。
四、跨域 CORS 只开最小配置
静态页面调用其他域名接口或字体资源时才需要跨域。允许来源只写本站与确实需要的域名,不要写星号。允许方法只写 GET 与 HEAD,允许头只写实际用到的字段。不要因为调试方便就长期保留宽松配置,调试用的域名要在上线前删掉。
五、上线前检查清单
上线前按清单逐项过一遍:匿名访问公开页正常;前缀外对象返回拒绝;非白名单站点引用图片被拒绝;跨域预检只对本站域名通过;错误页不泄露桶内结构;访问日志与流量告警已开启;策略变更留有记录与回滚方法。
收口不是关门,而是让每一处公开都有名字、有范围、有到期复查。把这三处收好,静态网站既能正常访问,也不会因为一次随手公开而付出流量与安全的代价。
- 点赞
- 收藏
- 关注作者
评论(0)