限定目录禁止解析php
防止乱上传php文件被执行
1.修改虚拟主机配置文件:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/www.123.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
2.重新加载配置参数:
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
3.创建测试php文件:
4.测试:
以上是1中全代码的运行结果;不能访问,更不能解析
以上是单“php_admin_flag engine off”代码的运行结果,不能解析。
限制user_agent:
user_agent可以理解为浏览器标识
1.修改虚拟主机配置文件:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>//NC 忽略大小写,F为fobidden的意思
2.重新加载配置参数:
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
3.测试:
curl -A "123123" -x127.0.0.1:80 'http://111.com/123.hph' #-A 指定user_agent,-e 指定referer 必须以“http://”开头,-x 省略hosts,-I 仅仅查看状态码
php配置相关:
/usr/local/php/bin/php -i|grep -i "loaded configuration file" #查看php配置文件位置 /usr/local/php7/etc/php.ini
date.timezone = #定义时区,date.timezone = Asia/Shanghai
disable_functions = #将以下函数禁用 :
eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close (危险的函数)
error_log = #定义log路径,即定义 log_errors 的路径
log_errors = #是否打开错误日志,on打开,off开启
error_reporting = #定义日志的级别,默认为E_all,生产环境上使用E_ALL & ~E_NOTICE
display = #on在浏览器显示错误信息,off关闭在浏览器显示错误提示
open_basedir =/data/wwwroot/111.com:/tmp #php.ini是针对所有站点的,此项亦可以在虚拟主机配置文件中做配置,添加如下行: php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"