11.29 限制user_agent
11.30/11.31 php相关配置
限定某个目录禁止解析php
对于PHP编写的网站吗,有一些目录是有需求上传文件的,最好就是把上传图片的目录做一个禁止解析PHP,不然有人恶意使用PHP代码写的木马上传到服务器,会导致他们拿到服务器最高权限。
添加以下配置:
1. vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2. <Directory /data/test.com/tupian>
php_admin_flag engine off
</Directory>
3. /usr/local/apache2.4/bin/apachectl -t
4. /usr/local/apache2.4/bin/apachectl graceful
5.测试
curl -x127.0.0.1:80 www.etc.com/tupian/1.php
下面直接把php全部拒绝访问:在上面的基础上加filesmatch保护
有关pho后缀全部拒绝
<Directory /data/test.com/tupian>
php_admin_flag engine off
<filesmatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</filesmatch>
</Directory>
测试:
curl -x127.0.0.1:80 www.etc.com/tupian/1.php
限制user_agent
user_agent可以理解为浏览器标识,比如别人同时发动100台用户攻击你的服务器,会造成访问太频繁,就会导致服务器浪费资源,从而服务器提供正常服务,这种攻击叫做CC攻击。当遇到这种情况,可以先查看日志,看看攻击是否有规律,从而限制user_agent来禁止别人访问。
添加一下配置,需要开启rewrite.c模块
1.开启rewrite模块
vim /usr/local/apache2.4/conf/httpd.conf
搜索rewrite取消#号
2.编辑虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
3.添加以下配置:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.* [NC]
RewriteRule .* - [F]
</IfModule>
代码上的NC是不区分大小写,OR表示或者 F表示Forbidden
4 /usr/local/apache2.4/bin/apachectl -t
5 /usr/local/apache2.4/bin/apachectl graceful
6.测试
curl -I -x127.0.0.1:80 www.etc.com
因为设置了curl访问都被拒绝所有是访问不了的。
7.测试其他agent
这里用到-A 自定义agent
curl -A "xxxxx1212" -x127.0.0.1:80 www.etc.com -I
通过测试这个是可以的!
我们也可以查看日志:
php相关配置
虽然PHP是以一个模块的形式存在,但是PHP本身有自己的配置文件.
我们去源码包把pho配置文件拷贝出来。
1.首先定位php文件路径
随意在站点目录写一个1.php文件
添加:<?echo
phpinfo(); //保存并在浏览器打开查看configuration file path文件路径
2. cd /usr/local/src/php-5.6.32/
cp php.ini-development /usr/local/php/lib/php.ini //拷贝生成环境使用的配置文件
3.graceful重新加载
定义下时间信息,不然有时候会报警告信息
1.vim /usr/local/php/lib/php.ini
2.搜索date.timezone
定义Asia/shanghai
disable_functions相关:
PHP有诸多内置函数,有一些函数(比如exec)会直接调取Linux系统命令,如果开放将会非常危险,为了安全考虑应该把一些存在安
全风险的函数禁掉:
1.vim /usr/local/php/etc/php.ini
2.搜索disable_functions
添加如下信息:
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
更改完后需要graceful重新加载。
配置error_log
PHP的日志对程序员来讲非常重要,他是排查问题的重要手段。
1,vim /usr/local/php/lib/php.ini
2.搜索log_errors
改成log_errors=on //打开日志功能
再搜索error_log 设置
error_log = /var/log/php/php_error.log //这个为错误日志保存路径
再搜索error_reporting
error_reporting = E_ALL 一般开发环境设置为E_ALL方便排查问题,但也会导致日志记录很多无意义的警告信息,所以看需求:
error_reporting = E_ALL & ~E_NOTICE //这样可以排除警告信息。
&表示并且 ~表示排除
然后再搜索display_erroes
display_errors = On 改为off,,这样设置是为了保证错误日志不直接显示浏览器里,避免日志暴露网站一些重要的文件路径信
息
2.设置好一切后,创建日志文件夹并设为777权限
mkdir /var/log/php
chmod 777 /var/log/php
3.重新加载httpd
/usr/local/apache2.4/bin/apachectl graceful
4测试 curl -i -x127.0.0.1:80 www.etc.com/1.php
查看日志:tail /var/log/php/php_error.log
open_basedir相关配置:
作用:将网站限定在指定目录里,就算该站点被黑了,黑客只能在该目录下面有所作为,而不能左右其他目录。
如果服务器只有一个站点,那可以直接在php.ini下设置open_basedir
步骤:
1.vim /usr/local/php/lib/php.ini
2。搜索open_basedir
修改为:open_basedir = /tmp:/data/test.com/tupian //只能在tmp和tupian 2个目录里活动
3.测试
curl -A"123" -x127.0.0.1:80 -I www.etc.com/1.php -I
查看日志:tail /var/log/php/php_error.log
可以看到因为open_basedir限制
curl -A"123" -x127.0.0.1:80 -I www.etc.com/tupian/1.php -I //只有访问图片目录才可以提示200
当然如果站点多的话,这个方法就没什么用了,这时有另外一个办法就是去虚拟主机配置文件中添加配置来限定:
1.vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2.在虚拟主机配置里添加
php_admin_value open_basedir "/data/test.com/tupian/:tmp/" //目录自定义,tmp一定要有,因为他是临时文件系统
总结,这样就可以实现一个虚拟主机定义一个open_basedir。