日期:2014-05-17  浏览次数:20773 次

PHP 安全

PHP 安全

http://netkiller.github.com/article/phpsecurity.html

Mr.?Neo Chen?(netkiller),?陈景峰(BG7NYT)


摘要

?

下面是我多年积累下来的经验总结,整理成文档供大家参考:

?

Netkiller Architect 手札 Netkiller Linux 手札 Netkiller Developer 手札 Netkiller Database 手札
Netkiller Debian 手札 Netkiller CentOS 手札 Netkiller FreeBSD 手札 Netkiller Shell 手札
Netkiller Web 手札 Netkiller Monitoring 手札 Netkiller Storage 手札 Netkiller Mail 手札
Netkiller Security 手札 Netkiller Multimedia 手札 Netkiller Writer 手札 Netkiller Version 手札
Netkiller PostgreSQL 手札 Netkiller MySQL 手札 Netkiller Cryptography 手札 Netkiller Cisco IOS 手札
Netkiller LDAP 手札 Netkiller Intranet 手札 ? ?

?


目录

1. Apache mod_php / php-fpm
1.1. 用户权限
1.1.1. Apache
1.1.2. Nginx / lighttpd + fastcgi
1.2. web server 版本信息
2. php.ini
2.1. 危险PHP函数
2.1.1. chdir()函数安全演示
2.2. 隐藏PHP版本信息
2.3. 隐藏PHP出错信息
3. 开发于安全
3.1. 彻底解决目录于文件的安全
3.2. Session / Cookie安全
3.3. 注入安全

1.?Apache mod_php / php-fpm

目录权限安全

1.1.?用户权限

web server 启动用户不能于运行用户为同一个用户

web server 运行用户与php程序不能为同一个用户

root      1082  0.0  0.1  11484  2236 ?        Ss   Mar01   0:00 nginx: master process /usr/sbin/nginx
www-data 13650  0.0  0.0  11624  1648 ?        S    09:44   0:00 nginx: worker process
www-data 13651  0.0  0.0  11624  1132 ?        S    09:44   0:00 nginx: worker process
www-data 13652  0.0  0.0  11624  1132 ?        S    09:44   0:00 nginx: worker process
www-data 13653  0.0  0.0  11624  1132 ?        S    09:44   0:00 nginx: worker process
			
  1. 夫进程

    root 启动 web server, 此时web server 父进程应该是 root,同时父进程监听80端口

  2. 子进程

    父进程派生许多子进程,同时使用setuid,setgid将子进程权限切换为非root

    子进程用户可以通过httpd.conf设置

    User nobody
    Group nobody
    					

    nginx.conf

    $ cat /etc/nginx/nginx.conf 
    user www-data;					
    					
  3. fastcgi 进程