哪些安全措施对静态网站有意义?
常见的 Web 应用程序攻击向量不适用于严格静态的网站。没有交互元素,就没有帐户可以劫持或 cookie 可以窃取。尽管如此,您应该为访问者提供加密访问权限——即使您没有托管敏感内容。
TL;博士
将 HTTPS 与 HSTS 结合使用,以确保一定程度的隐私和内容对访问者的完整性。将 HPKP 添加到静态站点可能是不必要的偏执,在部署它时必须小心。其他讨论的安全措施大多与静态站点无关,但它们实施起来非常简单,您可能仍会决定使用它们。
HTTPS
做吧。使用像Let's Encrypt这样的免费 SSL 证书提供商,您需要一个很好的理由不切换。HTTPS 保护传输数据的隐私和完整性,即使是静态内容也是如此。
完整性违规场景:如果您提供下载,中间人攻击者可能会篡改文件以传递恶意软件。侵犯隐私的示例:我的雇主、我连接的 WiFi 热点的所有者或我的 ISP 都可以看到我正在阅读的确切文章以及我正在从您的网站下载的内容。然而,使用 HTTPS,我主要会公开元数据(我连接的 IP 地址、由于 SNI 导致的主机名等)。
HTTP 严格传输安全
做吧。HSTS 有助于强制用户仅使用 HTTPS 连接到您的网站,从而防止SSL 剥离攻击。如果您推出 HTTPS,那么跟进 HSTS 就很有意义。它很容易通过添加一个额外的响应头来实现,如下所示:
Strict-Transport-Security: max-age=31536000
由于 HSTS 仅在用户第一次遇到标题(TOFU 模型)时生效,直到max-age
达到超时,您甚至可能希望将您的站点提交到HSTS 预加载列表。这意味着用户将在他们第一次访问时开始通过 HTTPS 进行连接。
请注意,启用 HSTS 后切换回纯 HTTP 很麻烦。
HTTP 公钥固定(“证书固定”)
这取决于。虽然 HSTS 告诉浏览器在给定时间内严格使用 HTTPS,但 HPKP 标头指定浏览器将来应该信任哪些证书。从证书链中固定公钥可以保护用户免受攻击者用恶意证书替换您的证书。这种攻击不太可能发生,因为攻击者需要破坏 CA 才能颁发流氓证书(尽管之前已经发生过)。此外,您在设置 HPKP 时必须小心,因为有缺陷的部署可能会使您的站点对以前的用户不可用。
Detectify Labs 有一篇关于 HPKP 的优秀文章,其结论更为乐观:
那么你应该使用HPKP吗?是的你应该。如果你正确地钉住,一切都向南走的机会很小。
内容安全政策
是的,但你可能并不真的需要它。创建 CSP 是为了通过限制您的站点允许从哪个来源加载的资源类型来缓解 XSS 和相关攻击。由于您有一个纯静态网站,并且可能根本不嵌入外部资源,因此它可能不是实际的攻击媒介。一个明智的策略将取决于您正在加载哪种资源。例如,此限制性策略标头仅允许来自同一来源的内容:
Content-Security-Policy: default-src 'self'
点击劫持保护
是的,为什么不。点击劫持攻击诱使用户通过伪装的框架在不知不觉中与您的网站进行交互。但是,如果您没有交互式元素,则不会造成实际损害。(不过,在一个更好的世界中,跨域框架将是一个可选功能。)实现很简单。此示例根本不允许任何帧嵌入:
X-Frame-Options: Deny
请注意,XFO 标头已被声明为过时,取而代之的是frame-ancestors
CSP 指令:
Content-Security-Policy: frame-ancestors 'none'
内容嗅探保护
是的,为什么不。如果您没有正确声明内容类型,浏览器可能会猜测(嗅探)类型(尽管这种行为已经变得不那么常见了)。这对于本应不可执行但由于缺少内容类型而在嗅探后确定为可执行格式的用户内容尤其危险。对于您的静态站点,这几乎不会成为问题。为了安全起见,您可以添加以下标头以防止嗅探(但它不能替代正确声明的 MIME 类型):
X-Content-Type-Options: nosniff
另请参阅:X-Content-Type-Options 真的可以防止内容嗅探攻击吗?
还可以查看OWASP 安全标头项目,了解有关安全相关标头的更多详细信息以及一些真实示例。
- HTTPS
- 严格的运输安全
- 证书固定
这些保护数据的传输免受嗅探和操纵。这种保护不仅适用于来自浏览器的请求,也适用于响应,因此即使对于静态站点也非常有意义。
- 内容安全政策
如果您不包含任何其他方面的内容,则可能没有必要,但也不会造成伤害。如果您包含您无法控制的外部内容,例如广告、图像、字体、脚本,那么限制它是有意义的。
- 点击劫持保护
如果您包含指向其他方面的链接,然后基于受信任的推荐人(即您的网站)进行操作,或者如果您包含社交媒体按钮或类似内容,则限制框架是有意义的。如果不是这样,除非您明确希望您的网站可以被其他人构架,否则它不会造成伤害。
- 内容嗅探保护
如果您提供的内容在内容嗅探处于活动状态时可能会被不同地解释(例如,将 HTML 作为文本/纯文本提供以显示源代码),那么启用内容嗅探保护是有意义的。如果没有,它不会伤害。
在您规划网站时,有很多事情需要考虑,尤其是当它是您的商业网站时,您总是需要特别注意它。然而,静态网站的风险往往比其他网站少,但它仍然应该遵循您上面提到的重要安全方面。此处提供的详细信息仅用于分享有关不同类型站点的安全问题的其他知识。我不需要在这里添加太多,因为@Arminius 和@Steffen 已经消除了大部分疑虑。还是让我补充一下我的观点:
HTTPS:
许多网站都认为他们的静态网站不需要 SSL 证书,但现在他们正在考虑将 SSL 作为其网站的一个重要方面。第一个原因是谷歌宣布提升排名;另一个原因是浏览器对非 HTTPS 站点的处理。
HSTS:
HTTP 严格传输安全或 HSTS 是保护网站免受cookie 劫持和降级攻击的安全协议,同时指示 Web 服务器仅允许 Web 浏览器和其他代理上的安全 HTTPS 连接。此策略在 HTTPS 安全性上添加了额外的层,并帮助网站及其用户保持安全。
太阳能电池板:
XSS(跨站脚本)、代码注入等攻击不仅会损害网站的性能,还会通过放置令人无法容忍的内容来扼杀声誉。无论是静态网站还是动态网站,注入恶意代码都会给网站带来麻烦。使用反恶意软件和定期漏洞评估可以帮助网站防止此类不必要的攻击。
HPKP:
HTTP Public Key Pinning (HPKP) 是一种通过限制攻击者颁发具有恶意意图的欺诈证书来避免攻击者的有效方法。HPKP 经常被错误地流行为证书固定,而它是一种安全机制,允许 HTTPS 网站抗议攻击者停止颁发欺诈性证书。
点击劫持:
这种技术在盗版电影网站上非常流行,他们将用户转发到虚假页面或下载。有时,点击劫持技术可以与恶意软件活动一起使用,在这种活动中,攻击者通过冒充广告来传播恶意软件。
内容嗅探:
内容嗅探是捕获或监视驻留在字节中的内容的类型,因此攻击者可以假设内容的文件类型。内容嗅探是指不准确的元数据,它被设置为以正确的方式呈现要推断的文件。
这只是我的看法:
- HTTPS
- 严格的运输安全
- 内容嗅探保护
- 证书固定
如果您不提供自定义或受保护的信息,为什么需要在静态站点上防止嗅探?我猜静态网站上的信息是公开的,所以没有必要覆盖这个。
- 内容安全政策
如果您不包含任何动态内容,也不包含外部内容(静态站点不包含)。那么这个也不是必需的。因为没有可能的 XSS 攻击。
- 点击劫持保护
正如Steffen Ulrich一样,除非您明确将您的网站设置为可被他人框架化,否则这不是必需的。
因此,结论是:如果您要设置一个严格静态的网站,则不需要任何这些安全措施。
在任何情况下,如果您认为您可以在不久的将来编辑此站点以使其更具活力,那么请添加所有可能的安全措施。