LAMP环境-限定PHP解析、useragent、PHP相关配置、Apache相关配置

11.28 限定某个目录禁止php解析

本节内容应用于对静态文件目录或可写的目录进行优化设置,经过限制解析/访问权限来避免别恶意攻击,提升安全性。php

编辑虚拟主机配置文件:html

[root@1 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
    <Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
    </Directory>

建立相应的目录:linux

[root@1 111.com]# mkdir upload
……
[root@1 111.com]# ls upload/
123.php  abc.jpg  baidu.png

测试:

[root@1 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/123.php' 
<?php
echo "welcom to 123file";
?>

[root@1 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/baidu.png' -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 04:47:16 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Last-Modified: Thu, 03 Aug 2017 04:25:26 GMT
ETag: "e7a-555d1c5172a6c"
Accept-Ranges: bytes
Content-Length: 3706
Content-Type: image/png

说明: 在此访问123.php文件时直接显示源代码,即没法进行PHP解析,访问其余类型的文件没问题。web

添加PHP访问限制

添加参数“< FilesMatch (.*)\ .php(. *) > ”:shell

[root@1 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    <Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        Order Allow,Deny
        Deny from all
        </FilesMatch>
    </Directory>

说明: 若是只设置禁止PHP解析,用户访问PHP文件时会显示源代码,添加该参数能够避免用户看到服务器PHP源码,进一步提高安全性。apache

测试:

[root@1 111.com]# curl -x127.0.0.1:80 111.com/upload/123.php -I
HTTP/1.1 403 Forbidden
Date: Thu, 03 Aug 2017 04:28:49 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@1 111.com]# curl -x127.0.0.1:80 111.com/upload/baidu.png -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 04:29:25 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Last-Modified: Thu, 03 Aug 2017 04:25:26 GMT
ETag: "e7a-555d1c5172a6c"
Accept-Ranges: bytes
Content-Length: 3706
Content-Type: image/png

说明: 此时访问123.php的状态码为403,即没法访问!vim

11.29 限制user_agent

user_agent(用户代理):是指浏览器(搜索引擎)的信息包括硬件平台、系统软件、应用软件和用户我的偏好。浏览器

需求背景:
有时候网站受到CC攻击,其原理是:攻击者借助代理服务器(肉机)生成指向受害主机的合法请求,实现DDOS和假装。CC攻击的一个特色就是其useragent是一致的,因此,能够经过限制攻击者useragent的方法来阻断其攻击。安全

编辑虚拟主机配置文件:服务器

[root@1 111.com]# 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>
……

说明: NC表示忽略大小写,OR选项表示或者(不加任何选项表而且)链接下一个条件,F=forbidden禁止。

检测:

[root@1 111.com]# curl -x192.168.8.131:80 'http://111.com/123.php' -I
HTTP/1.1 403 Forbidden
Date: Thu, 03 Aug 2017 06:59:14 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@1 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 'http://111.com/123.php' -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 07:01:01 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
[root@1 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 'http://111.com/123.php' 
welcom to 123file

说明: curl -A 指定useragent。

11.30 PHP相关配置

查看PHP配置文件:

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

PHP参数

  1. 设定时区
date.timezone
  1. 一些功能选项:

“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,phpinfo ”
以上功能选项能够经过“disable_function”来限制,以达到提升网站安全性的目的:

disable_function=
  1. 日志相关
  • display_errors=On/Off :设定是否显示错误缘由,须要注意的是,此处设置为off(防止用户看到)后必须设置错误日志,设定保存路径,和错误日志级别,不然将没法查找错误缘由 。

  • log_errors=On/Off 开启/关闭错误日志

  • “error_log=/tmp/” 设定错误日志的保存路径。若是定义好路径后没法生产日志,此时须要检查日志文件所在目录是否有写(w)权限

  • “error_reporting =” 设定错误日志级别,级别有:E_ ALL 、~E_ NOTICE 、~E_ STRICT 、~E_DEPRECATED(能够自由组合)。生产环境使用:E_ ALL & ~E_ NOTICE就能够。

官方说明:

E_ALL (Show all errors, warnings and notices including coding standards.)
E_ALL & ~E_NOTICE  (Show all errors, except for notices)
E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
  1. 安全参数“open_basedir”
open_basedir, if set, limits all file operations to the defined directory
; and below.  This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.  
译:若是设置了open_basedir选项,将会把全部关于文件的操做限制在指定目录及其子目录。
将该指令设定在每一个目录或者虚拟主机web服务器配置文件中很是重要。

说明: php.ini文件中的内容是针对全部虚拟主机进行的配置。

问题: 一台服务器运行着不止一台虚拟主机,因此在该文件下设置该选项并不合适。那么,该如何设定该配置呢?

办法: 分别在每一个虚拟主机的配置文件进行相关设置。

[root@1 111.com]# 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中的参数。使用该办法分别在每一个虚拟主机设定相关的“open_basedir”便可! 在此开放“/tmp/”目录是为了使临时文件能正常写入。

相关文章
相关标签/搜索