本节内容应用于对静态文件目录或可写的目录进行优化设置,经过限制解析/访问权限来避免别恶意攻击,提升安全性。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
添加参数“< 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
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。
查看PHP配置文件:
/usr/local/php/bin/php -i|grep -i "loaded configuration file"
date.timezone
“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=
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)
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/”目录是为了使临时文件能正常写入。