0511LAMP-防盗链、访问控制Directory和FilesMatch、限定某个目录禁止解析php、限制user_agent、php相关配置和扩展模块安装

 

任务列表:
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/6973php

 

pecl.php.net
pecl  安装管理扩展模块
pecl  install  redis
pecl  install  memcache
 html

 

1、配置Apache防盗链git

防盗链,经过限制referer来实现防盗链的功能,通俗讲就是不让别人盗用你网站上的资源,这个资源指的是图片、视频、歌曲、文档等,在这以前须要理解一下referer的概念,若是你经过A网站的一个页面http://a.com/a.html里面的连接去访问B网站的一个页面http://b.com/b.html,那么这个B网站页面的referer就是http://a.com/a.html。也就是说,一个referer就是一个网址。github

打开虚拟主机配置文件,按如下内容配置虚拟主机;redis

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf     //编辑虚拟主机配置文件shell

 /usr/local/apache2.4/bin/apachectl -t
 /usr/local/apache2.4/bin/apachectl gracefulapache

SetEnvIfNoCase Referer "^$" local_ref    定义为空referer,可直接访问图片vim

经过指定的referer来访问:浏览器

可是这个只是针对如下几种格式的内容: <FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">安全

定义111.com: SetEnvIfNoCase Referer "http://111.com" local_ref

定义aaa.com: SetEnvIfNoCase Referer "http://aaa.com" local_ref

若是把空referer注释掉去访问图片的话,显示以下

 curl -x192.168.56.3:80 111.com/qq.jpg -I        直接访问,状态200,至关于空refer

模拟referer为www.qq.com

 curl -e "http://www.qq.com/123.txt" -x192.168.56.3:80 111.com/qq.jpg -I

curl -e  定义referer为www.qq.com,返回Forbidden,禁止referer

 curl -e "http://111.com/123.txt" -x192.168.56.3:80 111.com/qq.jpg -I        定义refer为111.com,能够访问

2、Apache访问控制– Directory

对于一些比较重要的网站内容,除了可使用用户认证限制访问以外,还能够经过其余一些方法作到限制,好比限制IP,也能够限制user_agent。限制IP指的是限制访问网址的来源IP,而限制user_agent,一般用来限制恶意或者不正常的请求.

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

order 用来定义顺序,先deny或allow,无论ip是否匹配,都会按顺序执行完

实验:

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 准备工做:

在容许IP 127.0.0.1下,访问admin目录

curl -x127.0.0.1:80 111.com/admin/index.php -I   能够访问

curl -x192.168.187.3:80 111.com/admin/index.php  当更改源ip即目标ip,访问报错403

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

3、访问控制FilesMatch

这种格式可使用FilesMatch去匹配

编辑虚拟主机配置文件,进行FilesMatch配置;既要匹配文件,又要限制IP;

<Filesmatch admin.php(.*)> //文件匹配admin.php后面跟任意的字符

Allow from 127.0.0.1 //只容许127.0.0.1访问

403 Forbidden //由于只容许IP:127.0.0.1访问

404 Not Found //可以链接,可是无此页面

4、限定某个目录禁止解析php

有这样一种状况,有些站点和论坛是容许上传图片到服务器,他们上传一些php或者js到服务器,而后被咱们执行加载,从而对数据形成威胁。 为了不这种事情的发生,咱们须要限制上传类型。

编辑虚拟主机配置文件,进行如下配置;

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        Order deny,allow
        Deny from all
       </Filesmatch>
</Directory>
 

加deny是为了防止源代码被访问

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

建立目录,并把123.php复制到upload

进行测试,发现禁止解析php,也不能输出源代码;

curl -x127.0.0.1:80 http://111.com/upload/123.php -I

curl -x127.0.0.1:80 http://111.com/upload/123.php     //禁止访问,也不能输出源代码

再进行配置,把FilesMatch部分不执行,加上#号

进行测试,结果不能解析php,只能输出源代码;

把FilesMatch注释取消,便可限制输出源代码,显示403

所以为了安全,咱们必须让其根本不能访问php(匹配.php),不给其解析机会,不能访问源代码

5、访问控制,限制user_agent

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器可以识别客户使用的操做系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

 

 <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]        //定义条件,在这两个条件之间使用OR做为链接符,user_agent匹配第一个条件或第二个条件,不加OR就是而且的关系(不推荐使用),NC表示忽略大小写
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]        定义条件
        RewriteRule  .*  -  [F]
    </IfModule>

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 curl -x127.0.0.1:80 'http://111.com/123.php' -I        直接用curl访问111.com目录下的123.php,禁止访问,由于user_agent是匹配curl

用curl -A自定义user_agent的值

 curl -A "tobe" -x127.0.0.1:80 'http://111.com/123.php' -I    指定user_agent为tobe,能够访问

 tail /usr/local/apache2.4/logs/111.com-access_20190512.log  查看日志,能够看出user_agent为"curl/7.29.0" ,和tobe

curl -A  指定user_agent

curl -e指定referer     "http://"

curl -x 至关于省略了hosts

-I 查看状态码

6、php相关配置

查看php配置文件位置

经过编辑index.php内容查看

<?php

phpinfo();

Configuration File (php.ini) Path     配置文件所在目录:/usr/local/php7/etc

Loaded Configuration File    没有加载

使Loaded Configuration File    加载:

到php源码包配置文件中:cd /usr/local/src/php-7.1.25/

找到php.ini-development复制到/usr/local/php7/etc/目录下

cp php.ini-development /usr/local/php7/etc/php.ini

/usr/local/apache2.4/bin/apachectl graceful

此时已经加载

date.timezone   设置时区

对php的安全函数配置

vim /usr/local/php7/etc/php.ini      编辑/usr/local/php7/etc/php.ini配置文件

搜索 disable_functions

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   这些函数都是比较危险的,为了安全,通常要把他们禁用

/usr/local/apache2.4/bin/apachectl graceful  从新加载,此时已经禁用了phpinfo

在访问时会报错,而且会显示错误信息,显示目录

在编辑脚本 vim /usr/local/php7/etc/php.ini

搜索display_errors               display_errors = off //把on改成off

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

此时显示空页面

设置php的错误日志

vim /usr/local/php7/etc/php.ini

搜索log_errors

log_errors = On //定义错误日志是否开启,开启on
用error_log定义路径 

设置error_reporting 错误级别  

error_reporting = E_ALL  默认为E_ALL

更改成error_reporting = E_ALL & ~E_NOTICE //在生产环境中,最经常使用的就是这个!有时候出现notice并非出错

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

 curl -A "tobe" -x127.0.0.1:80 'http://111.com/index.php'  继续访问,没有输出

此时有设置的错误日志出现

查看看这个错误日志的权限,发现为daemon;说明跟httpd配置文件相关,daemon用户是httpd的属主,日志是已进程的身份进行的,若是定义了错误日志,可是始终没有生成,须要检查一下定义错误日志存放的目录是否有写权限,为了防止这种状况发生,能够先建立该目录,并给权限 

查看php错误日志cat /tmp/php_errors.log

模拟错误:

vim /data/wwwroot/111.com/2.php //新建2.php

 curl -A "to" -x127.0.0.1:80 http://111.com/2.php    空页面

 curl -A "to" -x127.0.0.1:80 http://111.com/2.php -I    500状态码

查看错误日志,能够看出不一样的错误级别

open_basedir配置

open_basedir安全选项

若是有一台服务器跑了不少个站点,其中就有一个站的程序写的很烂,漏洞百出,很容易被黑,一旦该站点被黑,整个服务器就会沦陷,其它站点一样也会被黑。在php配置文件中设置open_basedir防止该状况发生。

在php配置文件中,把111.com故意写成1111.com

curl -A "to" -x127.0.0.1:80 http://111.com/2.php -I   返回状态码500

在php配置文件中,把错误的目录1111.com改回111.com

curl -A "to" -x127.0.0.1:80 http://111.com/2.php -I    此时返回正常

 

针对不一样的虚拟主机设定不一样的open_basedir,当有多个站点时php.ini就没法知足要求了,php.ini是针对全部站点的

针对不一样的虚拟主机限定不一样的open_basedir,能够经过设置apache的虚拟主机配置文件设置

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"   加入此命令

默认的临时文件在tmp下,若是限制了tmp,临时文件都没法写入

重启配置后,能够访问成功

/usr/local/apache2.4/bin/apachectl -t

/usr/local/apache2.4/bin/apachectl graceful

7、PHP扩展模块安装

 /usr/local/php/bin/php -m //查看模块

1. 下载模块包安装

安装一个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/  进入目录

生成configure 文件  :/usr/local/php7/bin/phpize  此时报错,提示缺乏autoconf包

安装:yum install -y autoconf

继续执行生成configure文件,生成成功

配置、编译,安装

./configure --with-php-config=/usr/local/php7/bin/php-config

make && make install

编译完成后会把redis.so放到 /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/这个目录下

 /usr/local/php7/bin/php -i |grep extension_dir     //查看扩展模块存放目录,能够在php.ini中去自定义该路径

/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/路径和上面看的是一样的

  /usr/local/php7/bin/php -m |grep redis  此时尚未该模块

目录为空,此时在php.ini加载一条扩展语句

vim /usr/local/php7/etc/php.ini

添加extension=redis.so

 /usr/local/php7/bin/php -m |grep redis  此时已经加载

2. 编译自带的PHP源码包

php7的源码包中,有不少自带的源码包。咱们不须要再次下载,直接编译便可!

cd /usr/local/src/php-7.1.25/

cd ext/

 /usr/local/php7/bin/php -m |grep zip  此时没有zip模块

想要编译zip模块

进入zip目录    cd zip/

/usr/local/php7/bin/phpize    //生成configure文件

配置、编译,安装

./configure --with-php-config=/usr/local/php7/bin/php-config

make && make install

查看目录,此时发现zip.so模块

ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/

相关文章
相关标签/搜索