1.配置防盗链
refere概念
如果你通过A网站的一个页面http://a.com/a.html里面的链接,去访问B网站的一个页面http://b.com/b.html,那么这个B网站页面的referer就是http://a.com/a.html,也就是说一个referer就是一个网址
配置防盗链先打开虚拟主机配置文件
(reverse-i-search)`vi': vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com>
SetEnvIfNoCase Referer "http://111.com" local_ref // 定义允许访问链接的referer
SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref //把空referer设为白名单,即直接访问的地址
<FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
Order Allow,Deny //白名单地址allow,其他deny
Allow from env=local_ref // 白名单为local_ref对应的地址
</FilesMatch>
</Directory>
改完配置,还是需要检测语法 重新加载
检测防盗链能否正常运行
总结:
1.当需要访问111.com/1.jpg这个图片的时候:直接访问访问图片;
因为已经定义为空refer: **SetEnvIfNoCase Referer "^$" local_ref **
2.通过制定的refer来访问;
已经定义111.com引用者: SetEnvIfNoCase Referer "http://111.com" local_ref
已经定义ask.apelearn.com引用者: SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
2.访问控制
对于一些比较重要的网站内容,除了可以使用用户认证限制访问之外,还可以通过其他一些方法做到限制,比如限制IP,也可以限制user_agent。限制IP指的是限制访问网址的来源IP,而限制user_agent,通常用来限制恶意或者不正常的请求
在虚拟主机配置文件里面,按下面内容配置
<Directory /data/wwwroot/111.com/admin> //增加admin目录
Order deny,allow //按先拒绝,再允许执行
Deny from all //拒绝所有
Allow from 127.0.0.1 //允许ip
</Directory>
测试前的准备工作
开始测试
访问控制FilesMatch
编辑虚拟主机的配置文件
<Directory /data/wwwroot/111.com>
<FilesMatch admin.php(.*)>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
测试配置
3.限定某个目录禁止解析PHP
有这样一种情况,有些站点和论坛是允许上传图片到服务器,他们上传一些php或者js到服务器,然后被我们执行加载,从而对数据造成威胁。 为了避免这种事情的发生,我们需要限制上传类型
编辑虚拟主机配置文件,进行以下配置
<Directory /data/wwwroot/111.com/upload> //在111.com定义upload目录
php_admin_flag engine off //禁止php解析,所有访问都报403错误
<FilesMatch (.*)\.php(.*)> // .php 前后匹配任意字符
Order deny,allow //按禁止,允许执行
Deny from all //禁止全部
</Filesmatch>
创建目录,并把123.php复制到upload,做好测试准备工作
进行测试
总结:因此为了安全,我们必须让其根本不能访问php(匹配.php),不给其解析机会,一个程序员让PHP解析出来是个不合格的程序员
4.限定user_agent
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等
更改一下配置文件
<IfModule mod_rewrite.c>
RewriteEngine on //
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] //匹配curl,不区分大小写,或者
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
直接用curl访问111.com目录下的123.php
用curl -A指定user_agent的值
5.PHP相关配置
在111.com下,编辑index.php内容
此时浏览器上能够显示111.com/index.php
此时把php.ini-development文件,复制到/usr/local/php7/etc/php.ini
再重新刷新一下浏览器
危险函数禁用
编辑/usr/local/php7/etc/php.ini配置文件 这些函数都是比较危险的,为了安全,一般要把他们禁用
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
display_errors = off //把on改为off
data.timezone
设置php的错误日志
虽然免除了危险,但是对于我们管理员来说,这个页面,不友好,无法判断此页面;此时需要设置错误日志
打开php.ini配置文件
定义错误级别error_reporting
error_reporting = E_ALL
检测配置重新加载
查看看这个错误日志的权限,发现为daemon;说明跟httpd配置文件相关
查看错误日志
open_basedir配置
在php配置文件中设置open_basedi
在php配置文件中,把错误的目录1111.com改为111.com
针对不同的虚拟主机限定不同的open_basedir
[root@localhost php-7.1.6]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.con
6.PHP扩展模块
编译httpd时,有涉及动态和静态模块,PHP也一样有静态与动态之分,之前所涉及到的PHP安装都全部为静态,并没有任何动态的模块,所谓动态,就是一个独立存在的.so文件,在httpd中PHP就是以动态模块的形式被加载的。PHP一旦编译完成后,要想再增加一个功能的话,要么重新编译PHP,要么直接编译一个扩展模块(生成一个.so文件),然后在php.ini中配置一下,就可以被加载使用了
下载源码包
[root@localhost src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
改名并解压
mv develop phpredis-develop.zip
unzip phpredis-develop.zip
进行编译
因为没有./configure 先用PHP7先生成./configure
[root@localhost phpredis-develop]# /usr/local/php7/bin/phpize
yum install -y autoconf
下面进行编译
[root@localhost phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
opcache.so redis.so
此时已经生成了.so文件但是加载模块并没有显示redis.so模块所以我们需要配置一下文件
[root@localhost phpredis-develop]# /usr/local/php/bin/php -i |grep extension_dir
查看扩展模块目录
编辑配置文件把redis模块给加载进去
/usr/local/php/bin/php -m | grep redis //查看是否加载了redis
redis