11.28 限定某个目录禁止解析php
11.29 限制user_agent
11.30/11.31 php相关配置
11.28 限定某个目录禁止解析php
一般网站上用来存放静态文件的目录都是用来禁止解析PHP的,重要因为是为了防止某些别有用心的人用来上传php文件来获取服务器的信息
配置文件
我们在test1的站点上新建个upload目录用来存放静态文件并在test1的<VirtualHost>
里面加上以上配置1
2[root@localhost ~]# mkdir /var/www/test1.com/upload/
[root@localhost ~]# vim /var/www/test1.com/upload/1.php
1 | <Directory /var/www/test1.com/upload> |
加载文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
测试
用浏览器访问 由于不能解析php只能下载当前php文件来了
用curl命令访问 显示源代码就说明不能解析了1
2
3
4[root@localhost ~]# curl -x 192.168.80.101:80 test1.com/upload/1.php
<?php
phpinfo();
?>
我们也可以为了不让其他人来访问upload目录的php,可以加上访问控制
配置文件
1 | <Directory /var/www/test1.com/upload> |
加载文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
测试
浏览器禁止访问1.php
curl命令显示4031
2
3
4
5[root@localhost ~]# curl -x 192.168.80.101:80 test1.com/upload/1.php -I
HTTP/1.1 403 Forbidden
Date: Thu, 31 May 2018 22:41:37 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
11.29 限制user_agent
User-Agent用户代理是告诉服务器用户的使用的操作系统版本 浏览器类型等信息
有时候某些别有用心的人会使用cc攻击(使用大量肉鸡同时访问服务器)来访问你的服务器,这些cc攻击有个特征就是他们的user_agent都是一致的,并且访问的时间十分频繁。那么我就可以限制uer_agent来阻断他们的请求
配置文件
在test1的<VirtualHost>
里面加上以上配置1
2
3
4
5
6
7<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*chrome.* [NC]
RewriteRule .* - [F]
</IfModule>
NC
表示不区分大小写 OR
表示或者 F
表示禁止 由于是限制user agent 因此要把日志格式改为combined
加载模块
由于使用到了rewerite模块 因此去/usr/local/apache2.4/conf/httpd.conf
下 把rewrite模块的#去掉
加载文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |
测试
使用Chrome浏览器访问test1站点
使用IE浏览器再访问test1站点
使用curl命令访问test1站点1
2
3
4
5
6
7
8
9
10
11
12[root@localhost ~]# curl -x 192.168.80.101:80 test1.com -I
HTTP/1.1 403 Forbidden
Date: Fri, 01 Jun 2018 20:41:07 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
[root@localhost ~]# curl -A"safsda" -x 192.168.80.101:80 test1.com -I
HTTP/1.1 200 OK
Date: Fri, 01 Jun 2018 20:41:25 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Content-Type: text/html; charset=UTF-8
-A
指定user agent
11.30/11.31 PHP相关配置
查看PHP配置文件的路径
1.查看PHP的详细详细
/usr/local/php/bin/php -i
并找到loaded configuration file
那行文字1
/usr/local/php/bin/php -i|grep -i "loaded configuration file"
但是这样找PHP的配置文件有时候并不一定准确
2.使用phpinfo函数的页面在浏览器访问
新建一个php页面 并输入下面代码1
2
3<?php
phpinfo();
?>
并使用浏览器打开刚刚建立的PHP页面并找到loaded configuration file那行文字
这里可以看到PHP配置文件所在的路径在/usr/local/php/etc/php.ini
,这行默认是空的,因此可以将解压后PHP包里面复制模版配置文件到指定的配置文件目录下
1
[root@localhost php-5.6.32]# cp php.ini-development /usr/local/php/etc/php.ini
php.ini-development
适合开发环境下使用php.ini-production
适合在生产环境下使用
PHP默认的配置文件叫php.ini
定义时间
php.ini不定义时间会出现警告信息比较麻烦
配置文件
在php.ini中找到date.timezone
1
date.timezone = Asia/Shanghai
加载配置
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful |
禁止某些函数
PHP中有些比较危险的参数要禁止掉以防被人利用
配置文件
在php.ini中找到 disable_functions
1
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
一般在生产环境中也会禁掉phpinfo函数来以保安全
加载配置
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful |
测试
使用浏览器来访问刚刚phpinfo函数的页面,由于安全原因被禁止使用该函数
屏蔽错误信息
为了不让别人看到错误信息 因此我们可以扎到display_errors=On
改为display_errors=Off
配置文件
1 | display_errors = Off |
加载配置
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful |
测试
使用浏览器来访问刚刚phpinfo函数的页面,直接变为空白页
记录错误日志
配置文件
1 | log_errors = On ##定义启动错误日志,默认启动 |
加载配置
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful |
测试
1 | [root@localhost ~]# tail /tmp/php_errors.log |
错误日志无法生成原因1
2[root@localhost ~]# ll /tmp/php_errors.log
-rw-r--r--. 1 daemon daemon 141 6月 2 07:01 /tmp/php_errors.log
由于PHP的错误日志的所有者是daemon因此必须要在错误日志所在的目录下给daemon
读写执行的权限。最稳妥的方法是建立一个权限是777的目录
目录中权限限制
一个服务器上跑了多个站点,每个站点有相应的目录。假如某个站点被入侵了。为了不让其他站点被渗透,就使用了open_basedir来指定权限活动范围只在某个目录下
配置文件
在php.ini找到open_basedir
并写路径 默认网站的临时文件都在tmp目录下,因此除了网站的目录还有tmp目录1
open_basedir =/var/www/test1.com:/tmp
假如我们使用同一个目录来存放多个站点,那在php.ini中配置open_basedir不太合适,他是针对所有站点的,因此我们可以回去Apache的虚拟主机配置文件来设置
在每个<VirtualHost>
中输入1
php_admin_value open_basedir "/var/www/test1.com:/tmp/"
php_admin_value可以定义php.ini里面的参数
加载文件
1 | [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t |