一、配置防盗链
二、访问控制 – Directory(目录)
三、访问控制 – FilesMatch(文件)
四、访问控制 – 禁止php解析
五、访问控制 – user_agent
六、PHP相关配置
七、PHP动态扩展模块
一、配置防盗链
通过限制referer来实现防盗链的功能
配置文件增加如下内容
SetEnvIfNoCase Referer "http://111.com" local_ref
SetEnvIfNoCase Referer "http://aaa.com" local_ref
#SetEnvIfNoCase Referer "^$" local_ref
Order Allow,Deny
Allow from env=local_ref
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件,增加如下内容
重新加载配置文件
使用web访问
将该网站发到http://ask.apelearn.com,再访问http://111.com/baidu.png
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件,将http://ask.apelearn.com添加到白名单
重新加载配置文件
重新访问,显示正常
直接访问http://111.com/baidu.png
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件,更改如下内容
重新加载配置文件
直接访问http://111.com/baidu.png
二、访问控制 – Directory(目录)
核心配置文件内容
Order deny,allow
Deny from all
Allow from 127.0.0.1
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件,增加如下内容
创建admin目录,再admin目录下创建index.php文件编辑121212
指定源IP访问
查看日志
curl测试状态码为403则被限制访问了
三、访问控制 – FilesMatch(文件)
核心配置文件内容
Order deny,allow
Deny from all
Allow from 127.0.0.1
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟配置文件,修改如下内容
重新加载配置文件
与配置文件不匹配,访问文件显示404,访问文件显示403表示受到限制
显示404表示可以正常访问,只是目标文件不存在
四、访问控制 – 禁止php解析
有些目录是存放静态文件的目录,如图片目录,本身不需要允许php的解析。如果允许了php解析,而且又开放了该目录的文件上传权限。很可能被别有用心的人利用上传木马,导致服务器被攻破,获取到服务器的权限,除了开发人员在程序开发过程中要注意安全的设计,也可以通过apache限制某些目录的php解析。
核心配置文件内容
php_admin_flag engine off
Order deny,allow
Deny from all
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机编辑如下内容
重新加载配置文件
创建upload目录,并负责123.php文件到upload目录底下
测试,显示403
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机修改如下内容
curl测试时直接返回了php源代码,并未解析
使用web访问,直接显示下载
五、访问控制 – user_agent
user_agent可以理解为浏览器标识
有时候网站可能会遭受CC攻击,可以通过限制user—agent来减小攻击压力
核心配置文件内容
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机,编辑如下内容
重新加载配置文件
测试,显示403
查看日志
自定义USER_AGENT
curl -A "123123" 指定user_agent
curl -A "abc abc" -x127.0.0.1:80 'http://111.com/123.php' -I //-A参数指定USER_AGENT
查看日志
总结curl的参数用法:
-A指定USER_AGENT
-e指定referer
-x省略添加hosts
-I只查看状态码
六、PHP相关配置
再/data/wwwroot/111.com目录下创建index.php文件,编辑如下内容
用web访问http://111.com/index.php,显示php的详细信息
复制配置文件
cd /usr/local/src/php-7.1.6 //进入源码包所在的位置
cp php.ini-development /usr/local/php7/etc/php.ini //拷贝文件
/usr/local/apache2.4/bin/apachectl graceful //重新加载配置文件
再次访问
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
vim /usr/local/php7/etc/php.ini //进入php配置文件,搜索disable_functions,增加以下内容
加载配置文件
重新刷新页面
date.timezone 定义时区,如果没定义有时会出现告警信息
vim /usr/local/php7/etc/php.ini //进入php配置文件,搜索date.timezone,修改以下内容
搜索display_errors,修改以下内容
重新加载配置文件,刷新页面,无任何显示
curl访问也是无任何输出,无法判断输出是否正常
需要配置错误日志
vim /usr/local/php7/etc/php.ini //进入php配置文件,搜索log_errors,看错误日志是否开启
定义错误日志路径,搜索error_log
定义错误日志的级别,级别高的,只记录比较严峻的错误
重新加载配置文件
重新访问,查看/tmp/目录下生成php_errors.log日志文件
错误日志是由httpd这个进程所产生的
查看错误日志
vim /data/wwwroot/111.com/2.php //创建2.php文件,编辑如下测试
重新加载配置文件,访问该目录
cat /tmp/php_errors.log //查看日志
open_basedir隔离虚拟主机目录
vim /usr/local/php7/etc/php.ini //进入php配置文件,搜索opn_basedir,修改如下内容
更正2.php的内容
重新加载配置文件,访问该目录,显示正常
vim /usr/local/php7/etc/php.ini //进入php配置文件,将目录路径改成1111.com
重新加载配置文件,访问该目录,显示500
查看日志,显示500,是因为2.php并没有在允许的目录下
如果服务器有n个站点,修改php配置文件,无法做限制,php.ini是针对所有站点的。可以在虚拟主机配置文件里面做限制
vim /usr/local/php7/etc/php.ini //进入php配置文件,删除定义的路径
针对不同的虚拟主机限制不同的open_basedir
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //修改如下内容
重新加载配置文件,用crtl测试正常
七、PHP动态扩展模块
/usr/local/php/bin/php -m //查看模块
下面安装一个redis的模块
cd /usr/local/src/ 进入下载目录
wget https://codeload.github.com/phpredis/phpredis/zip/develop //下载源码包
mv develop phpredis-develop.zip //重命名
提示找不到unzip命令,用 yum install -y unzip安装
unzip phpredis-develop.zip //解压
cd phpredis-develop //进入解压安装包目录
/usr/local/php7/bin/phpize //生成configure文件
yum install -y autoconf //安装依赖包
重新执行命令/usr/local/php7/bin/phpize,生成configure文件
./configure --with-php-config=/usr/local/php/bin/php-config //编译
make
make install
/usr/local/php7/bin/php -m |grep redis //查询php是否加载了redis模块
/usr/local/php7/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
vim /usr/local/php7/etc/php.ini //增加一行配置(可以放到文件最后一行)
重新查询已加载redis模块
cd /usr/local/src/php-7.1.6 //进入php的安装目录
php没有加载zip模块,现在需要编译zip模块
cd zip //进入zip目录
/usr/local/php7/bin/phpiz //生成configure文件
./configure --with-php-config=/usr/local/php7/bin/php-config //编译
make
make install