专栏首页性能与架构Nginx 配置文件安全分析

Nginx 配置文件安全分析

简介

Gixy 是一个 Nginx 配置文件的分析工具,主要目标是防止由于不当的配置带来的安全问题

Gixy 是进行静态分析,只需要指定配置文件的路径,不需要启动任何环境

使用示例

配置文件 t.conf 的内容:

server {
    listen 80 default;

    location ~ /v1/((?<action>[^.]*)\.json)?$ {
        add_header X-Action $action;
        return 200 "OK";
    }
}

使用 gixy 进行分析:

gixy t.conf

结果:

检测到了一个问题,指出问题类型为 http_splitting,原因是 $action 变量中可以含有回车符

这就是HTTP响应头拆分漏洞,通过CRLFZ注入实现攻击,例如请求为:

/v1/see%20below%0d%0ax-crlf-header:injected.json

这个请求可以匹配上面的 location,响应信息为:

HTTP/1.1 200 OK
Server: nginx/1.11.10
Date: Mon, 13 Mar 2017 21:21:29 GMT
Content-Type: application/octet-stream
Content-Length: 2
Connection: close
X-Action: see below
x-crlf-header:injected

可以看到,成功的在最后一行添加了一个响应头 x-crlf-header:injected

因为请求中是包含回车符的,上面的请求 urldecode 后是这样的:

/v1/see below
x-crlf-header:injected.json

这就需要在 location 的匹配时进行严格的验证,改为:

location ~ /v1/((?<action>[^/\s]+)\.json)?$ {
    ...
}

再次使用 gixy 进行分析后通过了验证

Gixy 可以对配置文件中 include 的其他文件也一起进行分析,例如主配置文件 nginx.conf 引入了其他的配置:

include servers/*;

使用 gixy 分析 nginx.conf 时会自动把 servers 下的配置文件一起检查了,非常方便

可以分析出哪些问题

(1)ssrf 服务端请求伪造

(2)HTTP Splitting 响应拆分

(3)错误的 referrer/origin 验证

(4)错误使用 add_header 指令

(5)Host 头信息伪造

(6)Referer 验证中允许为空

(7)响应头中使用多行形式

安装

Gixy 发布在 PyPI 上,安装非常简单:

pip install gixy

安装后就可以执行 gixy 命令

小结

Gixy 简单实用,我对安全方面了解不多,用 gixy 检查一遍会感觉踏实很多,建议使用 Nginx 的朋友都试一下

Gixy 发布时间不长,但已经有了4千多个星,项目地址:

https://github.com/yandex/gixy

本文分享自微信公众号 - 性能与架构(yogoup),作者:杜亦舒

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-05-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图解JavaScript原型链

    假设父类 parentScope 有如下成员属性 : aString, aNumber, anArray, anObject 子类 childScope 继...

    dys
  • linux 定时任务crontab防止脚本运行冲突

    定时任务crontab是linux下常用的功能,可以设置一定的间隔时间执行任务,但有可能出现任务脚本运行冲突问题 例如某脚本要运行30分钟,在crontab里...

    dys
  • Linux下完胜top的进程监控工具

    top 是平时常用的进程监控工具,可以看到CPU、内存、系统负载、进程占用资源等信息 但 top 比较老了,htop 作为进程监控工具的后起之秀,不仅提供了t...

    dys
  • 摹客 XD 插件,支持固定区域切图!

    Hi!各位小伙伴!又到了摹客的新功能播报时间。本次更新,在摹客协作部分,XD插件支持固定区域切图;设计稿与设计规范关联更紧密;团队管理进一步优化等。在原型部分,...

    奔跑的小鹿
  • PHP Multipart/form-data remote DOS 防御方案研究

    这个的DOS漏洞炒得很火,百度安全攻防实验室的小伙伴也很给力。我个人认为漏洞的影响确实很大,毕竟对于一个web应用,拒绝服务攻击可以说是杀死它最简单的方法。这样...

    phith0n
  • Laravel 自定义公共函数的引入

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

    泥豆芽儿 MT
  • 在laravel框架中实现封装公共方法全局调用

    在 app/Helpers/(目录可以自己随便来)下新建一个文件 functions.php,在内部补充如下代码:

    砸漏
  • PHP6个基础语法梳理(附Demo)

    就如编写JavaScript脚本语言需要写在<script></script >标签之间一样, 在页面中编写的PHP代码写在<?php?>标签之间,但注意后面...

    凌川江雪
  • Python中SSH协议的实现 - Pa

    操作系统维护时, 一般会通过ssh命令连接到远端服务器, 进行某些操作. 那Python中如何完成这些呢, 当然也能执行ssh命令, 但还有更优雅的方式, 借助...

    py3study
  • C的|、||、&、&&、异或、~、!运算 位运算

    研究这个的起因是我遇到一个题目,判断一个数是奇偶数,这个很简单,但是又个最佳代码 判断奇偶时用了

    十四君

扫码关注云+社区

领取腾讯云代金券