PHP中的安全配置

PHP中的配置至关重要,包含php.ini的配置,还有系统权限的配置,一下是我总结的一些配置

一、PHP的模块

./configure    --with-libdir=lib64     --prefix=/usr/   --exec-prefix=/usr    --bindir=/usr/bin    --sbindir=/usr/sbin    --sysconfdir=/etc    --datadir=/usr/share    --includedir=/usr/include    --libexecdir=/usr/libexec    --localstatedir=/var    --sharedstatedir=/usr/com    --mandir=/usr/share/man    --infodir=/usr/share/info    --cache-file=../config.cache    --with-config-file-path=/etc    --with-config-file-scan-dir=/etc/php.d     --with-mysql=/usr/local/mysql   --with-mysqli=/usr/local/mysql/bin/mysql_config   --with-iconv-dir   --with-freetype-dir=/usr/local/lib   --with-jpeg-dir=/usr/local/lib   --with-png-dir=/usr/local/lib   --with-zlib   --with-libxml-dir=/usr   --enable-xml   --disable-rpath   --enable-bcmath   --enable-shmop   --enable-sysvsem   --enable-inline-optimization   --with-curl   --enable-mbregex   --enable-fpm   --enable-mbstring   --with-mcrypt=/usr/local/lib   --with-gd   --enable-gd-native-ttf   --with-openssl   --with-mhash   --enable-pcntl   --enable-sockets   --with-xmlrpc   --enable-zip   --enable-soap   --enable-opcache   --with-pdo-mysql   --enable-embed=shared   --enable-debug   --enable-dtrace

上面是一些比较常用的配置选项

[[email protected]]# php -m
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
ereg
fetch_url
fileinfo
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcached
mhash
mongo
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
tokenizer
trace
vld
xhprof
xml
xmlreader
xmlrpc
xmlwriter
Zend OPcache
zip
zlib

[Zend Modules]
Zend OPcache

我们可以通过php -m 来查看,

1、有些不需要的模块,在我们编译的时候就不要启用了

2、有些默认启用的模块,在我们编译的时候要禁用

二、防止PHP版本泄漏

可以通过expose_php来关闭

[[email protected] ~]# curl -I  192.168.1.30
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 15 Jul 2015 19:16:10 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.23
[[email protected] ~]# vim /etc/php.ini
expose_php = Off

服务器的版本信息也更改,在编译nginx之前可以将nginx修改为apapche

三、记录PHP和Nginx的日志

display_errors = Off
display_startup_errors = On
log_errors = On
error_reporting = 0
error_log = /var/log/php_errors.log

另外还要记录apache或者Nginx的访问日志,这个要在web server中配置

四、限制文件上传

web程序最不安全的就在这个地方了,用户可以上传文件,比如图片、脚本,然后再通过其他方式,对网站做一些破坏性的工作,所以上传的时候,要严格检查文件的格式

file_uploads = On
upload_tmp_dir =/data/www/tmp
upload_max_filesize = 2M
max_file_uploads = 20

 五、关闭远程资源的访问

如果这个特性被启动,将会禁用file_get_contents()、include、require中获取诸如FTP或网页内容这些远程数据

 allow_url_fopen=Off

 六、POST的限制

post_max_size=2m

 七、dos控制

最大执行时间、用于处理请求数据的最大时间、以及最大可用内存数、防止hash构造

max_execution_time = 30max_input_time = 30memory_limit = 40Mmax_input_vars = 1000

 八、权限以及安全模式的配置

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
open_basedir=/var/www/html/
safe_mode_exec_dir = /usr/local/bin/

确认以Apache或www这种非root用户运行Apache。/var/www/html目录下的owner也应是非root用户:
# chown -R apache:apache /var/www/html/

DocumentRoot下的文件应禁止运行或创建。设置该目录下的文件权限为0444(只读):
# chmod -R 0444 /var/www/html/

设置该目录下的所有文件夹权限为0445
# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}

配置文件加上写保护
# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/

 九、使用防火墙限制传出连接

攻击者会使用wget之类的工具从你的Web服务器下载文件。使用iptables来阻挡Apache用户的传出连接。ipt_owner模块会为本地数据包的生成者分配不同角色。它只对OUTPUT chain有效。下面指令允许vivek用户通过80端口进行外部访问

/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner vivek -p tcp --dport 80 -m state --state NEW,ESTABLISHED  -j ACCEPT

/sbin/iptables --new-chain apache_user
/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user

# allow apache user to connec to our smtp server
/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN

# Allow apache user to connec to api server for spam validation
/sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.62 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.61 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.89 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.88 --dport 80 -j RETURN

#########################

## Add more rules here ##

#########################

# No editing below

# Drop everything for apache outgoing connection
/sbin/iptables --append apache_user -j REJECT

 其他的有些安全配置

1、安装Mod_security

ModSecurity是一个开源的入侵检测和防范的Web应用引擎。安装mod_security可以保护Apache和PHP应用免受XSS和其他攻击

2、安装防DDOS模块mod_evasive

可以限制在一定时间内的访问频率

原文地址: http://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html

时间: 2024-10-05 14:01:17

PHP中的安全配置的相关文章

在Web.config或App.config中的添加自定义配置

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了. 如果你已经对自定义配置了如指掌,请忽略这篇文章.? 言归正传,我们先来看一个最简单的自定义配置 <?xml version="1.0" encoding="utf-8" ?> <configuration>

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

Django中的URL配置和模板

Django中的URL配置 : 实例: Python代码   urlpatterns = patterns('', # Example: # (r'^myweb/', include('myweb.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea

Xcode 中 Git 的配置与使用

Xcode 中 Git 的配置与使用主要围绕下面几个问题展开阐述: 问题1,如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在Xcode中克隆远程服务器代码库到本地? 问题4,如何使用Xcode获取远程代码库数据,并解决冲突问题? 一.如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 创建代码库有两种方式: 方式1:新建工程的时候创建 1. 勾选Create Git repository on

Netsreen NSRP环境中如何同步配置

NSRP环境中如何同步配置 环境: 1.FW1为主设备 2.FW2为从设备 3.确定FW1上的配置为当前正常工作 以下命令在FW2上执行: nsisg2000(B)-> exec nsrp sync global save 随后将出现以下输出: nsisg2000(B)-> load peer system config to save Save global configuration successfully. Continue to save local configurations .

解决struts2中validation.xml配置无效的问题

解决struts2中validation.xml配置无效的问题,我使用了xml的验证,却始终发现无法生效,后面发现才是xml的头文件的格式问题,修改了一下就好了. 成功的xml <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <val

在RedHat Linux系统中安装和配置snmp服务

检查系统是否安装snmp服务 # rpm -qa|grep snmp net-snmp-5.3.2.2-17.el5 net-snmp-perl-5.3.2.2-17.el5 net-snmp-devel-5.3.2.2-17.el5 net-snmp-libs-5.3.2.2-17.el5 net-snmp-utils-5.3.2.2-17.el5 net-snmp-libs-5.3.2.2-17.el5 net-snmp-devel-5.3.2.2-17.el5 SNMP服务安装后会有以上安

配置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况

在全新安装的IIS7下搭建网站,访问页面时出现错误信息如下: 配置错误 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overrideMode="Deny" 或旧有的 allowOverride="false" 的位置标记明确设置的.  配置文件 \\?\X(盘符):\目录名\目录名\web.config <system.we