利用 HTTP Security Headers 提升站点安全性

栏目: 后端 · 前端 · 发布时间: 6年前

内容简介:产品不断迭代,安全却很少关注,这在小团队司空见惯吗? 前两天拿到一份站点的安全检测报告:例举几点:

产品不断迭代,安全却很少关注,这在小团队司空见惯吗? 前两天拿到一份站点的安全检测报告:

利用 HTTP Security Headers 提升站点安全性

例举几点:

  • 你是否将 MysqlRedis 、Mongo 等端口暴露在公网?

  • 你是否采用 22、3306这种极易被扫描的默认端口?

  • 你是否强制使用 HTTPS?是否将HTTP重定向到了HTTPS?

  • 你是否设置了 HTTP Security Headers?

    还有检测不出来的,如果用了云服务器,是否禁用了root用户以密码登录?是否开启了安全组?…

本文整理几个  HTTP Security Header ,属于图中的 Application Security部分。将用 nginx 来演示这些配置。通过文中材料链接可查看更详细的信息。

HTTP Security Header

检测报告提示:未遵守 X-Frame-Options、X-XSS-Protection、HSTS、X-Content-Type-Options 的最佳实践,这几个都是 HTTP Response header。nginx 配置demo将在最下面给出。

X-Frame-Options

X-Frame-Options 用来告诉浏览器,页面能不能以 frame、 iframe、 object 形式嵌套在其他站点中,用来避免点击劫持(clickjacking)攻击。例如用下面代码将百度以  iframe 嵌入到自己的站点,然后监听  iframe 事件做些其他事情,用户如果不看URL估计以为自己在用百度。

<iframe src="https://www.baidu.com/" width="100%" height="100%" frameborder="no"></iframe>

利用 HTTP Security Headers 提升站点安全性

可选值:

  • DENY:页面不允许在 frame 中展示

  • SAMEORIGIN:same origin,页面可以在相同域名页面的 frame 中展示

  • ALLOW-FROM uri:页面可以在指定来源的 frame 中展示

X-XSS-Protection

用于处理跨站脚本攻击 (XSS)。

可选值:

  • 0:禁止XSS过滤

  • 1:启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面中不安全的部分,但页面仍然可以访问。

  • 1;mode=block:启用XSS过滤。 如果检测到攻击,浏览器将直接阻止页面加载。

HSTS

HSTS(HTTP Strict Transport Security,RFC 6797)  HTTP严格传输安全 ,指告诉浏览器自动从HTTP切换到HTTPS(当然,站点得支持HTTPS)。

举例说明,如下图(nginx 将http重定向到https):

  • 左边没加HSTS配置,301正常重定向,耗时  80ms ;

  • 右边配置了HSTS,浏览器利用cache,直接将HTTP转成了HTTPS,耗时  2ms ,免去了重定向过程。

    状态从  301 变成了  307 Internal Redirect 即浏览器内部跳转。

利用 HTTP Security Headers 提升站点安全性

X-Content-Type-Options

X-Content-Type-Options用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改,用于禁用了客户端的 MIME 类型嗅探行为。

当资源缺失 MIME 类型或设置了错误的 MIME 类型时,浏览器可能会通过查看资源来进行MIME嗅探。简单来说,就是如果浏览器不确定资源是什么,就会看看资源的内容,X-Content-Type-Options 就是让浏览器不要干这个事情。

可选值:

  • nosniff:sniff 即嗅探。

nginx 配置demo

HTTP Strict Transport Security (HSTS) and NGINX

通过nginx  add_header 指令在 response 中添加如下header,可以根据需要调整。add_header 可以作用于nginx的 http、server、location。

利用 HTTP Security Headers 提升站点安全性

Spring Security

如果你使用了 Spring Security,默认会利用  HeaderWriterFilter 将上面的安全配置全部写入 response。

如果你想在流量入口统一做安全设置,可以禁用或调整应用中 Spring Security 配置。修改你自定义的  WebSecurityConfig

@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       // 下面的所有实例代码都在这里
   }
}

修改配置

禁用 Secure Header

http.headers().disable();

禁用X-Frame-Options

其他选项不一一列出

http.headers().frameOptions().disable();

nginx 中剔除配置

如果应用中启用了 HTTP Secure Headers,但是最终返回的Response需要剔除某个配置。在不改代码前提下,可以通过nginx来剔除,例如从response中剔除X-Frame-Options配置:

proxy_hide_header X-Frame-Options;

小结

本文主要是想增长一丢丢安全意识,这些配置倒是次要的,还有更多的安全相关配置,需要时查查资料就好。

请通过阅读原文访问文中链接与参考资料


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

网络多人游戏架构与编程

网络多人游戏架构与编程

格雷泽 (Joshua Glazer)、马达夫 (Sanjay Madhav) / 王晓慧、张国鑫 / 人民邮电出版社 / 2017-10-1 / CNY 109.00

本书是一本深入探讨关于网络多人游戏编程的图书。 全书分为13章,从网络游戏的基本概念、互联网、伯克利套接字、对象序列化、对象复制、网络拓扑和游戏案例、延迟、抖动和可靠性、改进的延迟处理、可扩展性、安全性、真实世界的引擎、玩家服务、云托管专用服务器等方面深入介绍了网络多人游戏开发的知识,既全面又详尽地剖析了众多核心概念。 本书的多数示例基于C++编写,适合对C++有一定了解的读者阅读。本......一起来看看 《网络多人游戏架构与编程》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具