一、访问控制之限定某个目录禁止解析php

1、作用:对某些需要上传文件的目录进行限制解析PHP,防止他人上传php代码写的木马程序获取服务器权限。

2、编辑虚拟主机内容,在原来的基础上增加如下内容:

<Directory /data/testphp/111.com/upload>
php_admin_flag engine off
# <FilesMatch (.*)\.php(.*)>
# Order allow,deny
# Deny from all
# </FilesMatch>
</Directory>

#注释掉的代码如果加上直接是403,不加的话会显示php源代码。

3、创建相对应的目录与文件

mkdir -p /data/testphp/111.com/upload
[root@wangbing ~]# vim /data/testphp/111.com/upload/test.php

4、测试

1)当注释掉FilesMatch段时,显示源代码

2)当打开FilesMatch段时,显示403

 二、限制user_agent

1、user_agent :浏览器表识

2、编辑虚拟主机配置文件:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond &{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>

NC 表示不区分大小写,OR表识或者, F表识 Forbidden.

3、测试

1)此时我们发下无法访问,就是因为user_agent 匹配到了curl

2)指定 user_agent 访问 curl -A "fgsdgfjsbf" -x127.0.0.1:80 'http://111.com/123.php' -I

-A可以指定user_agent

当指定user_agent 没有匹配到A时可以访问。

三、php相关配置

1、查看php配置文件

命令:/usr/local/php/bin/php -i |grep -i "loaded configuration file";有时候找到的路径可能不准。

2、用web查找,在访问站点下创建phpinfo,在web下查看php配置文件径。

3、编辑配置文件/usr/local/php/etc/php.ini

1)定义date.timezone,如下图没有定义date.timezone,会有如下警告,定义后没有了。

date.timezone = Asia/Shanghai 

2)编辑 disable_functions 函数

disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandi
r,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,phpinfo

3)当把phpinfo禁掉后,效果如下:

4)、定义display_errors 

将 display_errors = On 修改为 display_errors = Off

display_errors = On 会把错误日志显示在浏览器里,会暴露网站的一些信息,

而改为Off后,在浏览器中什么都不会显示了,是空白的。

同样用curl访问,也没有信息输出。

5)定义错误日志:

a、设置 log_errors=on   设置为on,可以让php记录错误日志,设置为off,不记录日志

b、设置 error_log=/var/log/php_errors.log    设置日志路径

c、error_reporting =E_ALL & ~E_NOTICE     E_ALL为所有类型日志,记录所有类型的日志信息, &表示并且, ~表示排除,即排除notice信息。

6)测试

此时可以发现错误信息都保存到定义的日志当中了。

 四、配置open_basedir

1、作用:将网站限定在指定目录里。

2、在php.ini中设置open_basedir

open_basedir =tmp:/data/testphp/1111.com

3、测试

当设定目录是1111.com时,可以发现访问时都是500,查看日志/var/log/php_errors,报错为111.com/iindex.php没有被允许。

4、将目录改为111.com,发现可以访问了。

5、修改php.ini是对所有站点一起限定目录,而网站有多个站点,修改php.ini起不到隔离站点的作用。那么可以在/usr/local/apache2/conf/extra/httpd-vhosts.conf定义

6、编辑虚拟主机文件,增加下面内容

<VirtualHost *:80>
DocumentRoot "/data/testphp/aaa.com"
ServerName aaa.com
ServerAlias www.aaa.com www.123.com
php_admin_value open_basedir "/data/testphp/abcd.com:/tmp/"
ErrorLog "logs/aaa.com-error_log"
CustomLog "logs/aaa.com-access_log" common

</VirtualHost>

7、测试

 

posted on 2018-03-07 22:16  天梭  阅读(107)  评论(0编辑  收藏  举报