分享Nginx下10个安全问题提示
下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的Nginx部署是安全的。
1. 在配置文件中小心使用"if"。它是重写模块的一部分,不应该在任何地方使用。
“if”声明是重写模块评估指令强制性的部分。换个说法,Nginx的配置一般来说是声明式的。在有些情况下,由于用户的需求,他们试图在一些非重写指令内使用“if”,这导致我们现在遇到的情况。大多数情况下都能正常工作,但…看上面提到的。
看起来唯一正确的解决方案是在非重写的指令内完全禁用“if”。这将更改现有的许多配置,所以还没有完成。
来源: IfIsEvil
2. 将每个~ .php$请求转递给PHP。
我们上周发布了这个流行指令的潜在安全漏洞介绍。即使文件名为hello.php.jpeg它也会匹配~ .php$这个正则而执行文件。
现在有两个解决上述问题的好方法。我觉得确保你不轻易执行任意代码的混合方法很有必要。
代码如下:
1.如果没找到文件时使用try_files和only(在所有的动态执行情况下都应该注意) 将它转递给运行PHP的FCGI进程。
2.确认php.ini文件中cgi.fix_pathinfo设置为0 (cgi.fix_pathinfo=0) 。这样确保PHP检查文件全名(当它在文件结尾没有发现.php它将忽略)
3.修复正则表达式匹配不正确文件的问题。现在正则表达式认为任何文件都包含".php"。在站点后加“if”确保只有正确的文件才能运行。将/location ~ .php$和location ~ ..*/.*.php$都设置为return 403;
3. 禁用autoindex模块。
这个可能在你使用的Nginx版本中已经更改了,如果没有的话只需在配置文件的location块中增加autoindex off;声明即可。
4. 禁用服务器上的ssi (服务器端引用)。这个可以通过在location块中添加ssi off; 。
5. 关闭服务器标记。如果开启的话(默认情况下)所有的错误页面都会显示服务器的版本和信息。将server_tokens off;声明添加到Nginx配置文件来解决这个问题。
6. 在配置文件中设置自定义缓存以限制缓冲区溢出攻击的可能性。
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
7. 将timeout设低来防止DOS攻击。所有这些声明都可以放到主配置文件中。
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
8. 限制用户连接数来预防DOS攻击。
limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;
9. 试着避免使用HTTP认证。HTTP认证默认使用crypt,它的哈希并不安全。如果你要用的话就用MD5(这也不是个好选择但负载方面比crypt好) 。
10. 保持与最新的Nginx安全更新。
原文:http://www.levigross.com/post/4488812448/10-tips-for-securing-nginx
相关推荐
-
详解Nginx服务器中配置全站HTTPS安全连接的方法
HTTPS就等于HTTP加上TLS(SSL),HTTPS协议的目标主要有三个: 数据保密性.保证内容在传输过程中不会被第三方查看到.就像快递员传递包裹时都进行了封装,别人无法知道里面装了什么东西. 数据完整性.及时发现被第三方篡改的传输内容.就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收. 身份校验.保证数据到达用户期望的目的地.就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方. 启用
-
Nginx配置指令location匹配符优先级和安全问题
最近一直在做location 配置,遇到优先级别问题(如果配置不当可能存在安全隐患哦),以下是个人学习一点体会. 一. location 的匹配符1.等于匹配符:=等于匹配符就是等号,特点可以概括为两点:精确匹配不支持正则表达式2.空匹配符空匹配符的特点是:匹配以指定模式开始的 URI不支持正则表达式3.正则匹配符:~正则匹配符是可以使用正则表达式的匹配符.不过这里要强调的是,一般来说~是指:区分大小写的正则匹配而~*表示:不区分大小写的正则匹配但是对于一些对大小写不敏感的操作系统,这两者没有区
-
Linux下Nginx安全证书ssl配置方法
分享下我是如何一步步在Nginx上配置SSL的.首先,确保安装了OpenSSL库,并且安装Nginx时使用了–with-http_ssl_module参数. 初学者或者菜鸟建议使用LNMP进行一键安装. 生成证书:进入要生成证书的目录cd /usr/local/nginx/conf 使用openssl创建创建服务器私钥,输入相应提示的信息 复制代码 代码如下: openssl genrsa -des3 -out server.key 1024 创建证书签名请求(Certificate Signi
-
针对OpenSSL安全漏洞调整Nginx服务器的方法
1. 概述 当前爆出了Openssl漏洞,会泄露隐私信息,涉及的机器较多,环境迥异,导致修复方案都有所不同.不少服务器使用的Nginx,是静态编译 opensssl,直接将openssl编译到nginx里面去了,这就意味着,单纯升级openssl是没有任何效果,Nginx不会加载外部的 openssl动态链接库的,必须将nginx重新编译才可以根治. 2. 识别Nginx是否是静态编译的 以下三种方法都可以确认Nginx是否静态编译Openssl. 2.1 查看Nginx编译参数
-
Nginx服务器基础的安全配置与一些安全使用提示
安全配置 1. nginx介绍 nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端.nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回被nginx. nginx涉及到两个账户,一个是nginx的运行账户,一个是php-fpm的运行账户.如果访问的是一个静态文件,则只需要nginx的运行账户对文件具有读取权限:而如果访问的是一个php文件,则首先需要nginx的运行
-
Nginx服务器相关的一些安全配置建议
Nginx是当今最流行的Web服务器之一.它为世界上7%的web流量提供服务而且正在以惊人的速度增长.它是个让人惊奇的服务器,我愿意部署它. 下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的Nginx部署是安全的. 1. 在配置文件中小心使用"if".它是重写模块的一部分,不应该在任何地方使用. "if"声明是重写模块评估指令强制性的部分.换个说法,Nginx的配置一般来说是声明式的.在有些情况下,由于用户的需求,他们试图在一些非重写指令内使用"
-
Nginx服务器中关于SSL的安全配置详解
本文向你们展示如何在nginx的web服务器上设置更强的SSL.我们是通过使SSL无效来减弱CRIME攻击的这种方法实现.不使用在协议中易受攻击的SSLv3以及以下版本并且我们会设置一个更强的密码套件为了在可能的情况下能够实现Forward Secrecy,同时我们还启用HSTS和HPKP.这样我们就有了一个更强.不过时的SSL配置并且我们在Qually Labs SSL 测试中得到了A等级. 我们在nginx的设置文档中如下编辑 复制代码 代码如下: /etc/nginx/sited-enab
-
分享Nginx下10个安全问题提示
下面是一个常见安全陷阱和解决方案的列表,它可以辅助来确保你的Nginx部署是安全的. 1. 在配置文件中小心使用"if".它是重写模块的一部分,不应该在任何地方使用. 复制代码 代码如下: "if"声明是重写模块评估指令强制性的部分.换个说法,Nginx的配置一般来说是声明式的.在有些情况下,由于用户的需求,他们试图在一些非重写指令内使用"if",这导致我们现在遇到的情况.大多数情况下都能正常工作,但-看上面提到的. 看起来唯一正确的解决方案是在
-
nginx 下安装配置 phpadmin报错的解决方法
如下所示: 系统版本:centos7.0 64位 NGINX版本:nginx version: nginx/1.9.8 PHP版本:PHP 7.0.0 (cli) (built: Dec 1 2015 17:53:27) ( NTS ) mysql版本:mysqld Ver 5.7.10 phpmyadmin版本:4.5.2-all-languages 部署完phpmyadmin,访问主页报错: Error during session start; please check your PH
-
分享十条实用的Swift小提示
前言 虽然编程语言不会那么容易消逝,但坚持衰落范例的开发小组正在这么做.如果你正为移动设备开发应用程序,并且你还没有研究Swift,那么注意:当Swift涉及到Mac.iPhone.ipad.Apple Watch和未来设备的应用开发时,它不仅会排挤掉Objective-C,而且还会取代在Apple平台中做嵌入式开发的C语言. Swift有大量有趣的语法.特性.特点,只要掌握了用法就可以利用好它们. 在这篇文章中我会带你浏览我选择出的10条小提示,并附有已验证的代码供大家试用. 1.类与协议的e
-
Nginx下ThinkPHP5的配置方法详解
本文主要给大家介绍了关于Nginx下ThinkPHP5的配置方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: url里public目录的隐藏 出于安全的考虑,TP5的入口文件改成放在public下了,因为这样的话能防止被恶意用户访问到"/thinkphp/"."/vendor/"等等这些目录下的文件.所以当你以之前的习惯将网站documentroot配置为项目根目录的时候就会需要在url后面加上/public/来访问.当然可能也会有童鞋把入口文件放
-
nginx下支持PATH_INFO的方法实例详解
本文实例分析了nginx下支持PATH_INFO的方法.分享给大家供大家参考,具体如下: 要想让nginx支持PATH_INFO,首先需要知道什么是pathinfo,为什么要用pathinfo? pathinfo不是nginx的功能,pathinfo是php的功能. php中有两个pathinfo,一个是环境变量$_SERVER['PATH_INFO']:另一个是pathinfo函数,pathinfo() 函数以数组的形式返回文件路径的信息;. nginx能做的只是对$_SERVER['PATH
-
CentOS 7.2安装Nginx 1.10.2的详细教程
一.使用Yum安装(推荐) 使用Yum安装是推荐的方式,整体的流程非常的简单,也不容易出错,如果不需要什么特殊配置,建议使用Yum尽进行安装. 1.安装epel-release源并进行安装 yum install epel-release yum update yum install nginx 2.执行相关的应用操作 systemctl start nginx #启动 systemctl stop nginx #停止 systemctl restart nginx #重启 systemctl
-
Symfony2在Nginx下的配置方法图文教程
本文详细讲述了Symfony2在Nginx下的配置方法.分享给大家供大家参考,具体如下: 网上有很多关于symfony2在nginx下的配置文章,如果是小白,按照网上贴出来的配置文件配置,却怎么也不成功,我经过多次摸索,写下心得: 1. 首先开启Nginx的pathinfo 至于什么是pathinfo,可以参考文章<nginx下支持PATH_INFO的方法实例详解>,自行脑补.很多人按照教程配置的时候,会报500的错误,查报错日志也查不出来,八成就是没有开启pathinfo. 如果你的主机上安
-
解决tp5在nginx下修改配置访问的问题
第一:修改nginx配置 注意:所有配置都是基于lnmp1.4的一键安装环境的 根据自己的nginx配置,找到正确的fastcgi.conf,修改fastcgi_param参数 将默认的路径修改至自己的项目根目录的上一级,注意是上级!!! 3.lnmp nginx reload lnmp nginx restart 第二:执行service nginx restart命令重启nginx,发现网页报404错误,需要配置一下伪静态可以在/usr/local/nginx/conf/www.tp5.co
-
开启Nginx时端口被占用提示:Address already in use
如图所示: 查看端口占用情况: sudo netstat -apn | grep 80 查看占用端口的进程: ps -ef | grep 3345 通过结果可知,80端口是Nginx本身占用了,可以杀掉进程,重新启动Nginx sudo kill -9 3345 sudo netstat -apn | grep 80 成功杀掉进程后,启动Nginx 启动Nginx成功,在浏览器输入Nginx所在系统的ip地址,验证Nginx是否启动成功 下面介绍下Nginx的启动.停止与重启 启动 启动代码格式
-
shell脚本定时统计Nginx下access.log的PV并发送给API保存到数据库
1,统计PV和IP 统计当天的PV(Page View) cat access.log | sed -n /`date "+%d\/%b\/%Y"`/p |wc -l 统计某一天的PV cat access.log | sed -n '/20\/Sep\/2018/p' | wc -l 查看日志中访问次数最多的前10个IP cat access.log.1 |cut -d ' ' -f 1 | sort |uniq -c | sort -nr | awk '{print $0 }' |
随机推荐
- thinkPHP框架中执行原生SQL语句的方法
- bat 传递超过10个参数的情况
- 深入讲解Ruby中Block代码快的用法
- SQL多表连接查询实例分析(详细图文)
- Oracle数据库集复制方法浅议
- 简述Angular 5 快速入门
- 20个非常实用的Java程序代码片段
- asp.net Http异常eurl.axd出错信息解决方法
- 完整删除ecshop中获取店铺信息的API
- ASP 递归调用 已知节点查找根节点的函数
- MySQL中预处理语句prepare、execute与deallocate的使用教程
- php cookie名使用点号(句号)会被转换
- python3中bytes和string之间的互相转换
- java实现的简单猜数字游戏代码
- JS Attribute属性操作详解
- Android 解决dialog弹出时无法捕捉Activity的back事件问题
- IIS日志转到sqlserver的实现方法
- spring boot启动时加载外部配置文件的方法
- SQLServer2008存储过程实现数据插入与更新
- 易语言判断指定项目是否允许操作的方法