任务列表:
11.25 配置防盗链
11.26 访问控制Directory
11.27 访问控制FilesMatch
11.28 限定某个目录禁止解析php
11.29 限制user_agent
11.30/11.31 php相关配置
11.32 php扩展模块装安装
扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 配置https 支持ssl http://ask.apelearn.com/question/1029
apache rewrite教程 http://coffeelet.blog.163.com/blog/static/13515745320115842755199/ http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html
apache rewrite 出现死循环 http://ask.apelearn.com/question/1043
php错误日志级别参考 http://ask.apelearn.com/question/6973
11.25 配置防盗链
为了防止本站资源被其他站点盗用,所以应当配置防盗链
11.25.1 如何配置防盗链
<Directory /data/wwwroot/www.123.com>
SetEnvIfNoCase Referer "http://www.123.com" local_ref
SetEnvIfNoCase Referer "http://123.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>
- 将以上内容添加至虚拟服务器配置下
- "^$"的意思是空referer。指直接输入链接访问以及刷新。
- 注意把必要的后缀填写进去,不然实验不成功。
11.25.2 测试
curl -e “http://wwww.aminglinux.com/111.html” -x127.0.0.1:80 111.com/1.png
- -e 指定referer
11.26 访问控制Directory
Directory是针对目录的访问控制。
- 限制ip与访问的目录
11.26.1 具体操作
<Directory /data/wwwroot/www.123.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
- 表示,这个目录除了127.0.0.1以外都不能访问
- Order用来定义顺序 这里后边先deny然后allow。和deny或allow出现的顺序无关。
11.26.2 测试
[root@localhost admin]# curl -x192.168.19.131:80 111.com/admin/1.txt -I
HTTP/1.1 403 Forbidden \\由于限制了IP所以即使是本机地址也会显示403
Date: Sat, 11 May 2019 08:43:42 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.39
Content-Type: text/html; charset=iso-8859-1
................................................................................
[root@localhost admin]# curl -x127.0.0.1:80 111.com/admin/1.txt -I
HTTP/1.1 200 OK
Date: Sat, 11 May 2019 08:44:53 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.39
Last-Modified: Sat, 11 May 2019 08:34:30 GMT
ETag: "7-588988d522488"
Accept-Ranges: bytes
Content-Length: 7
Content-Type: text/plain
11.27 访问控制FilesMatch
- 核心配置文件内容
<Directory /data/wwwroot/www.123.com>
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
- 针对文件的访问控制
11.28 限定某个目录禁止解析php
- 核心配置文件内容
<Directory /data/wwwroot/www.123.com/upload>
php_admin_flag engine off
</Directory>
curl测试时直接返回了php源代码,并未解析
11.29 限制user_agent
- user-可以理解为浏览器标识
- 需求背景:网站受到CC攻击。就是一次性大量客户端的访问。
- 核心配置文件内容
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
- 以上配置可以限制类似的user-agent的访问
- [OR]保证两条规则是或者的关系
- [NC]表于乎略大小写
测试
- 由于以上限制规则里有curl,所以直接使用curl命令只会返回403
- curl -A “dasfasdf” 指定访问的user-agent
11.30/11.31 php相关配置
11.30.1查看pnp配置文件相关位置
- /usr/local/php/bin/php -i去查找php配置文件位置可能是错的。
- /usr/local/php/bin/php -i|grep -i “loaded configuration file”
- 最准确的方法是在网站的目录下添加一个phpinfo页面,在页面里查
vi /data/wwwroot/111.com/1.php
<?php
phpinfo()
?>
11.30.2 当配置文件没有或不生效时的解决方案
1,复制源码包中的配置文件至网页定义的配置文件目录中
cp /usr/local/src/php-5.6.39/php.ini-production /usr/local/php/etc/php.ini
2,重载apache
/usr/local/apache2.4/bin/apachectl graceful
11.30.3 初始化配置文件
1,配置无效化危险函数
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
以上是绝大多数危险函数,把它们配置到disable_functions=下
2,定义时区
- 一般时区定位到上海或重庆
3,是否在网页显示错误信息
display_errors = Off
- 这个选项控制了是否把错误信息显示在浏览器中,默认应关闭。防止暴露目录。
4,配置错误日志
- 首先保证
log_errors = On
- 然后在
error_log = /tmp/php_errors.log
配置错误日志的文件路径。 - 配置日志级别
error_reporting = E_ALL & ~E_NOTICE
- 日志存放的目录必须给daemon用户写权限,否则不会生成日志。
- 最保险的方法:
touch /tmp/php_errors.log ; chmod 777 /tmp/php_errors.log
5,限制远程访问目录
- 在php.ini中配置了open_basedir后,所有的远程访问都会限制在规定的目录中,以防止安全问题。
- 对单个站点的open_basedir限制:
在虚拟主机配置文件中加入php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
这样就可以对单独的站点进行访问限制了。
11.32 php动态扩展模块装安装
11.32.1 查看模块是否存在
/usr/local/php/bin/php -m //查看模块
/usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径
11.32.2 安装一个redis的模块
cd /usr/local/src/
wget https://codeload.github.com/phpredis/phpredis/zip/develop
mv develop phpredis-develop.zip
unzip phpredis-develop.zip
cd phpredis-develop
/usr/local/php/bin/phpize //生成configure文件
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/etc/php.ini //增加一行配置(可以放到文件最后一行)
extension = redis.so
只要添加配置文件就会启用,不用重载。
- 源码包内有一些扩展模块,如需要安装可以直接去源码包内查找。
- 还是按phpize ./configure make && make install的顺序安装。最后加入配置文件中。
- 注意phpize工具在/usr/local/php/bin/目录下,而不在源码包里。
直播笔记
pecl工具
专用门用安装php扩展模块
- /usr/local/php/bin/一般在这个目录下。
- 也可以去官网php.pecl.net下载
- /usr/local/php/bin/pecl install安装扩展。
- 这是一款在线安装工具,不支持本地源。官网也支持扩展包下载。