四十限定某个目录禁止解析php限制user_agentPHP相关配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四十限定某个目录禁止解析php限制user_agentPHP相关配置相关的知识,希望对你有一定的参考价值。

一、限定某个目录禁止解析php

禁止解析php主要是为了安全,一般静态文件所存放的目录下是不允许放PHP的

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<Directory /data/wwwroot/111.com/upload>

          php_admin_flag engine off       //禁止解析PHP

          <FilesMatch (.*)\.php(.*)>    //访问php后缀的全部拒绝,拒绝后都无法访问了,更不用说解析了。

          Order allow,deny

          Deny from all

          </FilesMatch>

  </Directory>

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

# mkdir upload

# cp 123.php upload/

# curl -x 127.0.0.1:80 "http://111.com/upload/123.php" -I  测试123.php

HTTP/1.1 403 Forbidden

将FilesMatch的几行注释后,禁止解析PHP,再测试,无法解析,显示源代码:

# curl -x 127.0.0.1:80 "http://111.com/upload/123.php"

<?php

echo "123,php";


二、限制user_agent

cc攻击:遇到user_agent很规律的请求,就可以判定是cc攻击。cc攻击,一秒钟访问N次服务器。

# vim /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>

OR:or,表示或者,curl或者baidu。

NC:忽略大小写。

F:Forbidden,禁止。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful

测试:

# curl -x 127.0.0.1:80 "http://111.com/123.php" -I

HTTP/1.1 403 Forbidden

# curl -x 127.0.0.1:80 "http://111.com/" -I

HTTP/1.1 403 Forbidden

因为用的curl,所以会被拒绝。

# curl -A "12345" -x 127.0.0.1:80 "http://111.com/" -I

HTTP/1.1 200 OK

# curl -A "ABC" -x 127.0.0.1:80 "http://111.com/" -I

HTTP/1.1 200 OK

-A:指定user_agent。指定了user_agent以后,这个RewriteRule就没意义了。

-e:指定referer

-I:查看状态码。

-x:指定目标IP。


三、PHP相关配置

(一)查看PHP配置文件位置:

1.# /usr/local/php/bin/php -i |grep -i "loaded configuration file"

有时候这一条不准。

2.一个很精准的办法,在虚拟主机的目录下创建一个index.php文件,然后将内容编辑为phpinfo();,然后用浏览器访问这个index.php的文件就可以查看到它配置文件所在的目录,但是并没有加载。

技术分享图片技术分享图片

技术分享图片技术分享图片

再复制一个模板到对应的该目录下。

# cd /usr/local/src/php-7.1.6/

# cp php.ini-development /usr/local/php7/etc/php.ini

# /usr/local/apache2.4/bin/apachectl graceful

再次访问index.php,可以看到已经加载了。

技术分享图片技术分享图片

再编辑就好了。

(二)disable_functions

# vim /usr/local/php7/etc/php.ini

disable_functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec

,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc

_close,phpinfo

这样设置,phpinfo和其他的函数就不能使用了,被禁止了:

Warning: phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2

更改后,需要重新加载配置文件才能生效:

# /usr/local/apache2.4/bin/apachectl graceful

(三)date.timezone = Asia/beijing 定义时间

(四)display_errors  访问时的错误信息,如果不允许访问,显示的就是白页

display_errors

;   Default Value: On

;   Development Value: Off  两个版本还有其他,开启或关闭。

;   Production Value: Off      开启单个时,前面的分号 要去掉。

; http://php.net/display-errors

display_errors = On 这里关闭,将全部关闭。

(五)log_error=on错误日志是否开启

error_log = /tmp/php_errors.log定义错误日志的位置。

测试:可以看到生成了php_error.log。它的属主和属组都是deamon,这个日志是以httpd这个进程的身份生成的。有时候定义了一个错误日志,但是错误日志一直没有生成,就要检查一下错误日志所在的目录有没有写权限。

技术分享图片技术分享图片

(六)error_reporting = E_ALL定义日志的级别

默认是E_ALL,全部记录。生产环境中是Show all errors, except for notices

技术分享图片技术分享图片

(七)open_basedir

作用:将网站限定在指定目录里,就算该站点被黑,黑客也只能在该目录下面有作为,而不能动其他的目录。如果服务器上只有一个站点,那么可以直接在php.ini中设置open_basedir参数。如果服务器上跑的站点比较多,那在php.ini设置就不合适了,因为php.ini中只能定义一次,也就是说所有站点都一起定义限定的目录,那这样就起不到隔离多个站点的目的。先学习如何在php.ini中设置open_basedir:

# vim /usr/local/php7/etc/php.ini

open_basedir = /data/wwwroot/111.com:/tmp 针对全部站点的。

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf      

也可以在虚拟主机配置文件设置

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

解析:

php_admin_value:可以定义php.ini里面的一些参数,比如error_log等。后面跟参数,然后指定的目标路径。

可以在不同的虚拟主机下进行配置,这里设置为/tmp,临时文件都限制了,黑客就不能上传文件了。

# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

# /usr/local/apache2.4/bin/apachectl graceful


扩展

apache开启压缩 http://ask.apelearn.com/question/5528

apache2.2到2.4配置文件变更 http://ask.apelearn.com/question/7292

apache options参数 http://ask.apelearn.com/question/1051

apache禁止trace或track防止xss http://ask.apelearn.com/question/1045

apache 配置https 支持ssl http://ask.apelearn.com/question/1029


以上是关于四十限定某个目录禁止解析php限制user_agentPHP相关配置的主要内容,如果未能解决你的问题,请参考以下文章

限定某个目录禁止解析php 限制user_agent php相关配置

LAMP(7限定某个目录禁止解析php 限制user_agent PHP相关配置PHP扩展模块

8.限定某个目录禁止解析php&限制user_agent

限定某个目录禁止解析php 限制user_agent php的配制文件PHP的动态扩展模块

11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31

11.28限定某个目录禁止解析php11.29限制user_agent11.30-31php相关配置