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

访问控制 – 禁止php解析.

note某个目录下禁止解析PHP,这个颇有做用,咱们作网站安全的时候,这个用的不少,好比某些目录能够上传文件,为了不上传的文件有木马,因此咱们禁止这个目录下面的访问解析PHP。php

1.先禁止解析PHP
<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
  </Directory>

 [root@linux-129 111.com]# curl -x127.0.0.1:80 '111.com/upload/admin.php'
<?php
echo "FilesMatch控制";
?>
2.禁止解析php而且拒绝任何人的访问
<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
 <filesmatch "(.*)php">
        	Order deny,allow
        	Deny from all 
   	 </filesmatch>
    </Directory>
[root@linux-129 111.com]# curl -x127.0.0.1:80 '111.com/upload/admin.php' -I
HTTP/1.1 403 Forbidden
Date: Mon, 09 Apr 2018 09:27:33 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1

访问控制 – user_agent

有时候咱们的网站会受到攻击,好比:CC攻击
大概原理,攻击的人他经过一些手段,软件或者肉鸡
什么是肉鸡
把别人的服务器黑了,拿到权限去控制它,若是想攻击一个网站的时候,他能够取控制肉鸡去访问这个网站,若是10000个肉鸡去访问网站,一半网站服务器并发不会很高,10000台去访问,他们的带宽,数据库都受不了。
CC攻击有一个很是规矩的特色,他的referer是同样的,user_agent也是同样html

这样咱们能够经过限制user_agent来减轻服务器压力linux

核心配置文件内容   
   <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
解释:shell

OR 或者的意思
NC表示忽略大小写
F forbidden的意思 禁止访问

curl的用法
-x  指定目标IP:目标端口
-u 后面是指定用户和密码
-I  不显示内容,只显示状态码
-e 指定 referer  -e  ”http://www.123.com“ 必须是http://开头
-A 指定user_agent(浏览器的标示)curl -A “123123”

PHP相关配置

查看php配置文件位置数据库

/usr/local/php/bin/php -i|grep -i "loaded configuration file"
• date.timezone=Asia/shanghai   定义时区,否则又是会出现警告信息

•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,phpinfo   \\禁掉一些危险的函数,你如一句话木马用到的函数eval,

• display_errors  on   \\修改为off,防止错误信息显示在页面上。

• log_errors on   \\打开错误日志功能

• error_log=/tmp/php_errors.log    \\定义错误日志的路径

• error_reporting  \\定义错误日志级别,默认是all ,生成环境用第二个

• open_basedir  \\安全相关参数,用来限定全部网站的目录,可是一台服务器有不少站点,而它们的目录是同一个,若是用open_dasedir限定在一个目录下面,那这个目录下面的网站均可以来去自如的运行,这个就和咱们要的效果不同了,因此咱们能够在虚拟主机配置文件中去配置

• php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"   \\针对不一样的虚拟主机限制不一样的open_basedir在每个虚拟主机配置中能够加入这个配置,将它们的站点目录都限制在指定的目录下面;
[root@linux-129 111.com]# ls /tmp/php_errors.log
/tmp/php_errors.log
[root@linux-129 111.com]# cat !$
cat /tmp/php_errors.log
[10-Apr-2018 12:23:08 Asia/shanghai] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2

[root@linux-129 111.com]# ls -l !$
ls -l /tmp/php_errors.log
-rw-r--r-- 1 daemon daemon 145 4月  10 12:23 /tmp/php_errors.log

它的属主和属组都是daemon
发现这个daemon有apache进程身份去生成的
apache

有时候咱们发现定义了错误日志,结果这个错误日志始终没有生成,咱们就要去检查这个定义错误日志的目录到底有没有写权限,这个写文件的是apache的启动用户daemon
为了保险起见,咱们定了一个errors_log
咱们彻底能够将这个文件建立好,而后作一个777权限vim

[root@linux-129 111.com]# vim /data/wwwroot/111.com/2.php  \\编辑一个错误的php
[root@linux-129 111.com]# curl -x127.0.0.1:80 111.com/2.php -I
HTTP/1.0 500 Internal Server Error
Date: Tue, 10 Apr 2018 04:35:17 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
X-Powered-By: PHP/7.1.6
Connection: close
Content-Type: text/html; charset=UTF-8
[root@linux-129 111.com]# cat /tmp/php_errors.log
[10-Apr-2018 12:23:08 Asia/shanghai] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2
[10-Apr-2018 12:35:17 Asia/shanghai] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 4
syntax error:语法错误
[root@linux-129 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/" \在每个虚拟主机配置中能够加入这个配置,将它们的站点目录都限制在指定的目录下面浏览器

php_admin_value 这个参数能够在虚拟主机配置文件中添加php.ini里面的一些参数,好比error_log,open_base.dir,error_reporting等等。安全

这里为何要设置一个/tmp 呢?
由于默认的临时文件是在/tmp下,若是/tmp被限制了,它连他的临时文件都不能写入进去,它上传的图片会先临时放到/tmp目录下面,而后慢慢放到要放的目录下面去。服务器

相关文章
相关标签/搜索