一、配置防盗链
二、访问控制 – Directory(目录)
三、访问控制 – FilesMatch(文件)
四、访问控制 – 禁止php解析
五、访问控制 – user_agent
六、PHP相关配置
七、PHP动态扩展模块
一、配置防盗链
通过限制referer来实现防盗链的功能
配置文件增加如下内容
<Directory /data/wwwroot/111.com>
SetEnvIfNoCase Referer "http://111.com" local_ref
SetEnvIfNoCase Referer "http://aaa.com" local_ref
#SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
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添加到白名单

重新加载配置文件
![]()
重新访问,显示正常


vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件,更改如下内容

重新加载配置文件
![]()


二、访问控制 – Directory(目录)
核心配置文件内容
<Directory /data/wwwroot/111.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟主机配置文件,增加如下内容

创建admin目录,再admin目录下创建index.php文件编辑121212

指定源IP访问

查看日志

curl测试状态码为403则被限制访问了

三、访问控制 – FilesMatch(文件)
核心配置文件内容
<Directory /data/wwwroot/www.123.com>
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //进入虚拟配置文件,修改如下内容

重新加载配置文件

与配置文件不匹配,访问文件显示404,访问文件显示403表示受到限制

显示404表示可以正常访问,只是目标文件不存在

四、访问控制 – 禁止php解析
有些目录是存放静态文件的目录,如图片目录,本身不需要允许php的解析。如果允许了php解析,而且又开放了该目录的文件上传权限。很可能被别有用心的人利用上传木马,导致服务器被攻破,获取到服务器的权限,除了开发人员在程序开发过程中要注意安全的设计,也可以通过apache限制某些目录的php解析。
核心配置文件内容
<Directory /data/wwwroot/www.123.com/upload>
php_admin_flag engine off
<FilesMatch (.*)\.php(.*)>
Order deny,allow
Deny from all
</FilesMatch>
</Directory>
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来减小攻击压力
核心配置文件内容
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
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

2248

被折叠的 条评论
为什么被折叠?



