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

限定某个目录禁止解析php

  • 核心配置文件内容

<Directory /data/wwwroot/www.123.com/upload>php

    php_admin_flag engine offshell

</Directory>apache

  • curl测试时直接返回了php源代码,并未解析

假若有一个目录是容许上传图片的,可能让黑客上传了一个PHP文件,因为网站能够执行PHP文件,一旦执行,就会让黑客拿到服务器权限,为了不这种状况发生,咱们须要把能上传文件的目录禁止解析PHP。vim

打开虚拟主机配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,添加内容以下(红框中),保存退出浏览器

php_admin_flag engine off ,禁止解析php安全

检查配置文件语法正误,并从新配置文件服务器

建立一个upload,新建php文件curl

curl测试,出现403socket

那么先打开虚拟主机配置文件,注释掉FilesMatch那几行函数

检查配置文件语法正误,并从新配置文件

这时访问php,发现没法解析,只是显示源代码

访问111.com/upload/123.php,会直接下载,也没办法解析

若是这时候再打开虚拟主机配置文件,取消FilesMatch那几行注释,检查配置文件语法正误,并从新配置文件,而后再访问111.com/upload/123.php

禁止php解析,就是为了提升服务器安全性,通常静态文件存放的目录是不容许解析php的

限制user_agent

  • user_agent能够理解为浏览器标识
  • 核心配置文件内容

    <IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]

        RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

        RewriteRule .* - [F]

    </IfModule>

  • curl -A "123123" 指定user_agent

有时候,网站会受到一种黑客攻击叫 cc 攻击,cc攻击就是利用不少用户的电脑同时访问同一个站点,当访问量或者频率达到必定层次,会耗尽服务器资源,从而使之不能正常提供服务。因为其中这些恶意请求的user_agent相同或者类似,那咱们就能够经过限制user_agent发挥防攻击的做用,减轻服务器压力。

打开虚拟主机配置文件vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,添加内容以下(红框中),保存退出

NC表示忽略大小写,OR是两条命令的链接符,表示或者的意思,不加OR就表示而且。

检查配置文件语法正误,并从新配置文件

curl访问测试,出现403

查看访问日志

自定义user_agent

查看访问日志

curl -A 指定user_agent,curl -e指定referer,curl -I查看状态码,curl -x至关于省略了hosts

php相关配置

  • 查看php配置文件位置
  • /usr/local/php/bin/php -i|grep -i "loaded configuration file"
  • date.timezone
  • 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_errors, display_errors, error_reporting
  • open_basedir
  • php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

在111.com的根目录下建立phpinfo

切换到源码包路径,复制文件

找到配置文件的路径

打开并配置PHP文件,vim /usr/local/php/etc/php.ini

搜索/disable_functions,禁掉一些的函数,保存退出

从新加载配置文件/usr/local/apache2.4/bin/apachectl graceful

再去浏览器访问111.com/index.php,会发现phpinfo没法打开

打开配置文件,搜索/timezone,定义date.timezone时区,若是不定义,有时候会有一些告警信息,注意删掉date前面的分号

搜索display_errors,将On改为Off,这样就不会把错误的信息直接显示在浏览器上

检查配置文件语法正误,并从新加载配置文件

在浏览器中访问111.com/index.php,会看到的是白页

而后配置错误日志,搜索/log_errors,看到log_errors=On,表示错误日志已开启

搜索/error_log,定义错误日志文件路径error_log= /tmp/php_errors.log,error_log前的分号去掉

搜索/error_reporting,定义日志的级别,默认为ALL;在生产环境中,notices出现的频率很高。

检查配置文件语法正误,并从新加载配置文件

再访问一下,会看到生成了php_errors.log,而且属主属组是daemon

查看进程

再作个测试

curl访问2.php,显示的的状态码为500

查看错误日志

安全相关的参数open_basedir

打开php配置文件 vim /usr/local/php/etc/php.ini

搜索/open_basedir,去掉分号,修改为open_basedir = /data/wwwroot/111.com:/tmp

从新加载配置文件,而后访问2.php,就不会报错了

针对不一样的虚拟主机去限制不一样的open_basedir,打开虚拟主机配置文件

检查配置文件语法正误,并从新加载配置文件

这样就能够了,针对不一样的虚拟主机去限制不一样的open_basedir

扩展

apache rewrite教程

apache rewrite 出现死循环

php错误日志级别参考

php开启短标签

php.ini详解

相关文章
相关标签/搜索