• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Nginx环境下PHP安全设置

Nginx环境下PHP安全设置

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了PHP安全,Nginx安全,Nginx设置等相关知识,希望对您有所帮助

当下Nginx越发流行,宝塔面板、Oneinstack、LNMP等集成环境大多数都使用Nginx作为WEB服务,Nginx + PHP情况下使用FPM(FastCGI 进程管理器)来执行PHP,这篇教程抛开PHP程序写法不严谨造成的本身漏洞,仅从WEB服务和PHP本身设置来加强PHP程序安全。


Nginx环境下PHP安全设置


禁用危险函数

PHP提供的system()等函数可以直接执行系统命令,如果程序限制不严谨或写法不规范,被骇客利用是非常危险的,禁用此类较为危险的函数非常有必要。需要修改php.ini,添加如下内容:

disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen

防止跨站攻击

跨站攻击通常表现为A网站被黑之后,骇客利用脚本再次访问B网站或其它目录,最终可能导致所有网站全部沦陷。

open_basedir 参数将php所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。open_basedir设置的方法比较多,这里列出几个常用的。

php.ini设置

可以直接修改php.ini直接加入

open_basedir="指定目录"

从PHP脚本上设置

在程序脚本上限制:

ini_set('open_basedir', '指定目录');

通过.user.ini 进行设置

先来看看官方具体是如何解释.user.ini这个文件的:

自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。

简而言之,也就是说当PHP以CGI/FastCGI SAPI方式运行时,会去读取一个.user.ini的配置,我们可以在这里面设定open_basedir参数来防止跨站。

在站点根目录下新建一个.user.ini,内容如下:

open_basedir=/data/wwwroot/:/tmp/:/proc/

为防止.user.ini被篡改,可以给这个文件加上隐藏属性。

chattr +i .user.ini

目前已知的宝塔面板,军哥LNMP(lnmp.org)默认使用.user.ini来防止跨站,这个方式非常灵活,可以针对某个网站单独设置。

禁止部分目录执行PHP

大多数PHP框架,如CodeIgniter、ThinkPHP都是单一入口,只需要index.php有入口权限程序就能正常运行。上传目录、静态文件目录完全没必须要赋予PHP执行权限,否则反而可能被利用。nginx可以通过下面的规则来禁止某个目录执行PHP:

#uploads|templets|data 这些目录禁止执行PHPlocation ~* ^/(uploads|templets|data)/.*.(php|php5)$ {    return 444;}

其它说明

以上主要是针对PHP本身设置和Nginx上进行限制,若有不足还请指正。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Nginx环境下PHP安全设置
  • 聊聊TP在app接口开发过程中的安全验证问题

相关文章

  • 2022-04-29关于蓝奏网盘部分地区无法下载解决方案
  • 2022-04-29DEDECMS网页TITLE标签修改的利于SEO优化
  • 2022-04-29Phpcms V9管理后台登陆及会员注册登录模板的修改
  • 2022-04-29vuejs中v-show和v-if的区别是什么
  • 2022-04-29帝国cms防止恶意注册 会员空间发布违规违禁信息
  • 2022-04-29将phpcms默认ckeditor编辑器换成KindEditor
  • 2022-04-29thinkphp5.1的model模型自动更新update_time字段实例讲解
  • 2022-04-29微信小程序使用cookie保持session
  • 2022-04-29如何使用PHP原生来导出Excel和CSV文件
  • 2022-04-29thinkphp的钩子的两种配置和两种调用方法

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • WordPress主题文章作者评论区留言高亮显示
    • JS数组如何删除指定元素
    • VUE动态添加的路由页面刷新时失效的原因及解决方案
    • 利用yii 2框架发送电子邮件
    • Dedecms5.7如何将系统的data目录迁移到web以外目录
    • Nginx下怎么部署php项目
    • Linux怎么安装ffmpeg-php扩展
    • 简单聊聊Redis中GETBIT和SETBIT
    • Photoshop绘制任天堂Wii游戏手柄
    • phpMyadmin该怎么实现root账户外部访问

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有