对网页及JavaScript进行签名防范服务端篡改的相关技术咨询
符合需求的技术方向参考
1. 签名HTTP交换(Signed HTTP Exchanges, SXG)
- 属于W3C孵化的Web底层标准,当前主流浏览器已经实现基础兼容能力
- 核心逻辑为内容发布者对完整HTTP响应的内容、头信息进行签名,签名可绑定到域名对应的公钥,浏览器加载时会先校验签名合法性,签名不通过直接拒绝加载对应资源
- 即使服务器被攻击者控制,没有对应私钥也无法生成合法签名,从根源避免篡改后的内容被用户加载
2. 签名Web Bundle(Signed Web Bundles)
- 基于SXG扩展的网页打包标准,支持将网页所需的全部资源(HTML、JS、CSS、媒体资源等)打包为单个文件并做全局签名
- 浏览器加载时会校验整个资源包的签名有效性,只要签名验证失败就不会加载包内任何资源,完全匹配你对完整网页做签名防篡改的需求
3. DANE(基于DNS的命名实体认证)结合自定义校验逻辑
- 可以通过DNS的TLSA或TXT记录存储网页内容签名对应的公钥,和你提到的DKIM实现逻辑完全一致,公钥可依托DNSSEC保障不可篡改
- 可以搭配浏览器扩展或者浏览器原生校验逻辑,拉取DNS记录中的公钥对加载的网页资源签名做校验,不符合校验规则的内容直接拦截
补充说明
- 你提到的XML Signature标准已经被主流浏览器淘汰,目前W3C主推的网页内容签名方案就是SXG和签名Web Bundle路线,相关标准已经进入稳定阶段,部分生产场景已经落地使用
- 现有HTTPS和SRI失效的核心原因是信任锚点绑定在服务器侧,上述方案将信任锚点转移到了域名DNS记录或者发布者持有的私钥侧,完全规避了服务器被攻陷后的内容篡改风险
内容的提问来源于stack exchange,提问作者PiTheNumber
相关产品推荐
相关产品推荐

