Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • PHP

    • PHP-FPM使用指南
    • PHP7新特性总结
    • PHP安全编程
    • PHP安全配置总结
      • PHP变量的值类型和引用类型
      • PHP标准规范PSR
      • PHP操作Zookeeper实践
      • PHP错误和异常处理机制详解
      • PHP的Session运行机制
      • PHP底层运行机制和原理
      • PHP反射模拟实现注解路由
      • PHP高级用法总结
      • PHP开发常用文档总结
      • PHP开发入门:Memcached扩展安装
      • PHP开发入门:PHP7安装部署
      • PHP开发入门:Redis扩展安装
      • PHP开发SPL总结
      • PHP框架常见URL模式
      • PHP扩展开发入门
      • PHP垃圾回收机制
      • PHP类的自动加载
      • PHP输入输出流
      • PHP微服务开发指南
      • PHP协程
      • PHP写时拷贝技术
      • PHP性能优化之Opcache
      • PHP依赖注入和控制反转
      • PHP运行模式(SAPI)
      • PHP中file_get_contents与curl区别
      • RPC的简单实现
      • Protobuf:高效数据结构化工具
      • P3P协议详解
      • Laravel之集合(Collection)总结
      • Laravel实践总结
      • Laravel之ORM总结
      • 中高级PHP实践总结
      • PHP Socket编程实战
    • Golang

    • Python

    • Javascript

    • 其他语言

    • 编程语言
    • PHP
    Ravior
    2017-12-03
    目录

    PHP安全配置总结

    # 1. 减少PHP模块

    为了增强性能和安全性,建议减少PHP中的模块,通过以下命令可以查看安装的模块:

    php –m
    
    1

    一些无用的内置模块,可以通过修改PHP配置文件(php.ini),将相应模块注释掉即可,例如sqlite3:

    ;extension=sqlite3 
    
    1

    # 2. 隐藏PHP版本信息

    默认PHP在HTTP Response Header中会添加版本号声明(X-Powered-By),这为攻击者提供了一个非常有价值的信息:

    HTTP/1.1 200 OK
    Server: openresty
    Date: Sun, 06 Oct 2019 07:44:12 GMT
    Content-Type: text/html; charset=UTF-8
    Transfer-Encoding: chunked
    Connection: keep-alive
    Vary: Accept-Encoding
    X-Powered-By: PHP/7.3.6
    Content-Encoding: gzip
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    可以禁用expose_php配置项隐藏X-Powered-By信息:

    expose_php = Off
    
    1

    # 3. 禁用远程执行代码

    通过file_get_content或者fopen函数,可以从远程获取数据,如果使用不当,没有对返回数据进行过滤,此方法就会造成安全漏洞。要解决此问题,可以禁用allow_url_fopen配置项:

    allow_url_fopen=Off
    
    1

    除了这个,还建议禁用allow_url_include配置下以提高系统的安全性:

    allow_url_include=Off
    
    1

    # 4. 禁用PHP中的危险函数

    PHP中有很多危险的内置功能,如果使用不当,可能使系统崩溃,可以通过disable_functions配置项来禁用它。

    disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
    
    1

    # 5. 资源控制

    为了提高系统的稳定性,强烈建议设置每个脚本解析请求数据所花费的时间和脚本可能消耗的最大内存量。正确的配置这些参数可以防止PHP任何脚本消耗太多的资源或是内存,从而避免系统不安全或降低安全系数。

    max_execution_time = 30
    max_input_time = 30
    memory_limit = 40M
    
    1
    2
    3

    # 6. 限制PHP访问文件系统

    open_basedir配置项可以指定允许PHP访问的目录,如果任何脚本试图访问超出open_basdir定义的路径文件,PHP将拒绝打开,配置参考如下:

    open_basedir = "/www/websites/www/gitlib/"
    
    1

    # 7. 限制文件/目录访问

    对于PHP-FPM进程以非root用户运行,比如www-data,同样对于Web资源目录和文件也要属于非root用户,可以通过修改所有者访问权限,提升安全性:

    chown -R www-data:www-data /www/websites/www/gitlib/
    
    1

    # 8. 禁用全局变量自动注册

    PHP会根据register_globals配置项,判断是否将$_GET、$_POST、$_COOKIE、$_ENV、$_SERVER、$REQUEST等数组变量里的内容自动注册为全局变量,为了避免造成变量污染引发安全漏洞,这个配置项一般都禁用掉。

    register_globals = Off
    
    1

    PHP 4.2.0 版开始配置文件中 register_globals 的默认值从 on 改为 off,这一项在新版本中可以无视。

    #PHP
    上次更新: 2022/12/02, 22:04:34
    PHP安全编程
    PHP变量的值类型和引用类型

    ← PHP安全编程 PHP变量的值类型和引用类型→

    最近更新
    01
    常用游戏反外挂技术总结
    11-27
    02
    Golang开发实践万字总结
    11-11
    03
    Redis万字总结
    10-30
    更多文章>
    Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式