11.28限定某个目录禁止解析php
通常网站会有一个目录用于上传文件,但如果某些别有用心的人上传一个php文件,当这个php被执行时就有可能获取一些系统权限,比较危险。所以,我们可以对这个上传的目录里的文件设置禁止解析php,来提高网站安全性。
配置文件
#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*) > //截图php多了一个点
Order allow,deny //截图deny前面多了个空格
</FilesMatch>
</Directory>
不禁止访问php,别人是可以访问源代码的
测试一下禁止解析php
1,先把禁止访问php文件那几行注释掉,然后检查语法重新加载
2.创建upload目录,复制123.php到upload目录下
# mkdir /data/wwwroot/111.com/upload
# cp /data/wwwroot/111.com/123.php /data/wwwroot/111.com/upload/
3.进行访问
# curl -x127.0.0.1:80 111.com/upload/123.php //可以看到直接显示文件源代码了
网页访问,就直接下载了
加上禁止访问php那几行配置
再进行访问
# curl -x127.0.0.1:80 111.com/upload/123.php
11.29限制user_agent
CC攻击:攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(ChallengeCollapsar)
由于CC攻击一般采用相同的user_agent,比较规律,所以我们可以通过限制user_agent来在一定程度上防止CC攻击。
user_agent可以理解为浏览器标识
1.编辑配置文件,添加以下内容
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
这里使用到了RewriteEngine, OR是或者的意思,这就是就是匹配curl或baidu.com,NC表示忽略大小写
RewriteRule .* - [F] //就是禁止
2.检查语法,重新加载
3.用curl进行访问,403
4,自定义agent
5.查看访问日志
//-A指定useragent -x相当于省略了host -I 进查看状态码 -e指定referer
11.30PHP相关配置
1.查看php配置文件位置
#/usr/local/php/bin/php -i|grep -i "loaded configuration file" //这个查找的不一定准确
2.比较准确的是用phpinfo来进行查找
# cd /data/wwwroot/111.com/
# vim index.php
打开浏览器进行访问 //可以看到配置文件是none
3.加载php配置文件
没有加载就去复制一份到配置文件目录
# cd /usr/local/src/php-7.1.18/
# cp php.ini-development /usr/local/php7/etc/php.ini //复制的开发版的
重新加载一下配置
# /usr/local/apache2.4/bin/apachectl graceful
重新刷新一下网页,可以看到配置文件已经加载了
4.查看及编辑配置文件内容
# vim /usr/local/php7/etc/php.ini
常用配置
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,网页访问index.php
2.data.timezone // 定义一下时区,不然会有一些警告,这里定位到Aisa/Shanghai
3.日志相关
display_errors //默认是开启的,错误会显示在浏览器上,暴露目录,这里把它改为Off
重新打开网页,就变成空白了
但是这样,什么错误也看不到也不是我们想要的,所以同时要配置一下错误日志,让错误在日志里显示
log_errors //定义错误日志是否开启
error_log //定义错误日志输出路径
这里把它定义到tmp下
error_reporting //定义日志输出级别
//默认是all,不太严谨,生产环境一般用E_ALL & ~E_NOTICE
试验是否生成了错误日志
另外,错误日志用户和组是daemon
错误日志,有时可能因为权限问题无法生成,为了保险起见,我们可以创建错误日志,并给予777权限
# touch /tmp/php_errors.log ;chmod 777 /tmp/php_errors.log
再模拟一个错误
#vim /data/wwwroot/111.com/2.php
# curl -x127.0.0.1:80 111.com/2.php -I
#cat /tmp/php_errors.log
4.open_basedir 设置允许访问的路径
一台服务器上跑了多个站点,其中一个代码有问题被黑了,其他的站点很可能一样被黑掉,而设置open_basedir,一般只能黑掉一个目录,其他的看不到,就能提高很大安全性,这就是它的作用。
即使只有单个站点,设置open_basedir也是有必要的
open_basedir = /data/wwwroot/111.com:/tmp //这里设置只允许访问111.com和tmp
但是如果有多个站点,在php.ini中这样设定是针对所有站点的,这样不合适,我们可以在虚拟主机配置文件中来做限制
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
配置语句是
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
这样就可以根据虚拟主机来设置目录了,注意tmp目录要有,php在运行中会生成临时文件的。