11.25 配置防盗链

11.26 访问控制Directory

11.27 访问控制FilesMatch

11.28 限定某个目录禁止解析php

11.29 限制user_agent

11.30/11.31 php相关配置

11.32 php动态扩展模块装安

11.33扩展

11.34课堂笔记

 

 

11.25 配置防盗链

通过限制referer来实现防盗链的功能

配置文件增加如下内容

  <Directory /data/wwwroot/www.123.com>

        SetEnvIfNoCase Referer  "http://www.123.com" local_ref

        SetEnvIfNoCase Referer "http://123.com" local_ref

#定义Referer的白名单

        #SetEnvIfNoCase Referer "^$" local_ref  #这行不用先注释掉  

        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">

            Order Allow,Deny   

#Order是定义顺序的,是先允许(Allow)还是拒绝(Deny)

            Allow from env=local_ref

#将上面设置的白名单允许,其他的Deny拒绝掉(只有防盗链特殊,其他的Order都是最后匹配的生效的)

        </filesmatch>

    </Directory>

#filesmatch的f和m大小写都行

#referer指的是允许用户通过指定的其他网站链接访问本网站的图片等文件

#空referer则表示允许直接访问本网站的图片等文件链接地址

 

然后-t检查,然后graceful

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

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

 

curl -e "http://www.qq.com/123.txt"

 ##自定义referer,要以"http://"开头

 

curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 123.com/123.png  -I

#www.qq.com不在referer白名单里面,所以被限制访问

[[email protected] www.123.com]# curl -e "http://www.qq.com/123.txt" -x127.0.0.1:80 123.com/123.png  -I

HTTP/1.1 403 Forbidden

Date: Fri, 14 Sep 2018 00:45:42 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

#www.123.com砸白名单里面,所以可以访问

[[email protected] www.123.com]# curl -e "http://www.123.com/123.txt" -x127.0.0.1:80 123.com/123.png  -I

HTTP/1.1 200 OK

Date: Fri, 14 Sep 2018 01:00:19 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Last-Modified: Thu, 13 Sep 2018 09:08:09 GMT

ETag: "18b42-575bd0bb17040"

Accept-Ranges: bytes

Content-Length: 101186

Content-Type: image/png

 

#将空referer设置白名单后,SetEnvIfNoCase Referer "^$" local_ref,直接输入网站图片链接可以访问

没设置空referer

[[email protected] www.123.com]# curl -x127.0.0.1:80 123.com/123.png -I

HTTP/1.1 403 Forbidden

Date: Fri, 14 Sep 2018 01:08:13 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

第十一章LAMP架构介绍(下)

 

设置后,

[[email protected] www.123.com]# !curl

curl -x127.0.0.1:80 123.com/123.png -I

HTTP/1.1 200 OK

Date: Fri, 14 Sep 2018 01:09:19 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Last-Modified: Thu, 13 Sep 2018 09:08:09 GMT

ETag: "18b42-575bd0bb17040"

Accept-Ranges: bytes

Content-Length: 101186

Content-Type: image/png

第十一章LAMP架构介绍(下)

 

 

   

11.26 访问控制Directory

目的是限制目录访问

核心配置文件内容

  <Directory /data/wwwroot/www.123.com/admin/>

        Order deny,allow

#先执行deny语句,后执行allow语句

        Deny from all

        Allow from 127.0.0.1

    </Directory>

#Order会从头到尾执行一遍,不管是Deny还是allow

#将127.0.01允许访问,其他的Deny掉

检查语法-t,然后重载文件grateful

 

 

#限制的是源ip访问,而curl -x指定的是目标ip

curl -x127.0.0.1:80  123.com/admin/1.php -I

#这个是127.0.0.1自己访问自己,123.com/admin/1.php

[[email protected] www.123.com]# curl -x127.0.0.1:80  123.com/admin/1.php -I

HTTP/1.1 200 OK

Date: Fri, 14 Sep 2018 01:16:37 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

X-Powered-By: PHP/7.1.6

Content-Type: text/html; charset=UTF-8

 

curl -x192.168.233.150 123.com/admin/1.php -I

#这是源ip192.168.233.150访问自己

[[email protected] www.123.com]# curl -x192.168.233.150:80  123.com/admin/1.php -I

HTTP/1.1 403 Forbidden

Date: Fri, 14 Sep 2018 01:16:47 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

 

当访问被限制目录下的不存在文件时,允许访问的源ip显示404状态码,被限制不允许访问的源ip显示403状态码

curl -x127.0.0.1:80  123.com/admin/aghf  -I

[[email protected] www.123.com]# curl -x127.0.0.1:80  123.com/admin/aghf  -I

HTTP/1.1 404 Not Found

Date: Fri, 14 Sep 2018 01:20:10 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

curl -x192.168.233.150:80 123.com/admin/aghf  -I

[[email protected] www.123.com]# curl -x192.168.233.150:80 123.com/admin/aghf -I

HTTP/1.1 403 Forbidden

Date: Fri, 14 Sep 2018 01:20:48 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

 

11.27 访问控制FilesMatch

目的:匹配文件名(链接);有些网站的网址很长,还带有特殊字符,若干的参数等等

核心配置文件内容(在Directory中间插入FilesMatch)

<Directory /data/wwwroot/www.123.com>

    <FilesMatch  admin.php(.*)>

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </FilesMatch>

</Directory>

 

curl -x192.168.233.150:80 123.com/admin/ghfjkas -I

#状态码为404(可以访问的原因是不是被限制文件的句型,错误)

[[email protected] www.123.com]# curl -x192.168.233.150:80 123.com/admin/ghfjkas -I

HTTP/1.1 404 Not Found

Date: Fri, 14 Sep 2018 01:36:12 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

curl -x192.168.233.150:80 'http://123.com/admin.php?ghfjkas'  -I

#状态码为403(被限制访问)

[[email protected] www.123.com]# curl -x192.168.233.150:80 'http://123.com/admin.php?ghfjkas'  -I

HTTP/1.1 403 Forbidden

Date: Fri, 14 Sep 2018 01:36:18 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

curl -x127.0.0.1:80 'http://123.com/admin.php?ghfjkas'  -I

#状态码为404(允许访问,出现错误)

[[email protected] www.123.com]# curl -x127.0.0.1:80 'http://123.com/admin.ph?gfjkas'  -I

HTTP/1.1 404 Not Found

Date: Fri, 14 Sep 2018 01:36:42 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

Content-Type: text/html; charset=iso-8859-1

 

 

11.28 限定某个目录禁止解析php

目的:网站允许上传图片,为了防止别有用心的人上传一些恶意的php文件,然后被网站的php解析,给网站带来不好的影响

核心配置文件内容(禁止目录解析php)

    <Directory /data/wwwroot/www.123.com/upload>

        php_admin_flag engine off

    </Directory>

 

#curl测试时直接返回了php源代码,并未解析

curl -x127.0.0.1:80 'http://www.123.com/upload/123.php'

[[email protected] www.123.com]# curl -x127.0.0.1:80 'http://www.123.com/upload/123.php'

<?php

phpinfo();

?>

 

使用浏览器打开www.123.com/upload/123.php时,会直接下载123.php文件,说明根本没有解析123.php

 

这一段表示限制访问所有的php文件

<FilesMatch  (.*)\.php(.*)>

        Order  allow,deny

        Deny  from all

#如果不加Deny,它会直接访问源代码

        </FilesMatch>

 

将这一段插入禁止php解析后面

   <Directory /data/wwwroot/www.123.com/upload>

        php_admin_flag engine off

<FilesMatch  (.*)\.php(.*)>

        Order  allow,deny

        Deny  from all

        </FilesMatch>

    </Directory>

 

实现的效果是不会返回源代码,显示状态为403

curl -x127.0.0.1:80 'http://www.123.com/upload/123.php'

[[email protected] www.123.com]# curl -x127.0.0.1:80 'http://www.123.com/upload/123.php'

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html><head>

<title>403 Forbidden</title>

</head><body>

<h1>Forbidden</h1>

<p>You don't have permission to access /upload/123.php

on this server.<br />

</p>

</body></html>

 

使用浏览器打开www.123.com/upload/123.php时,直接是403状态,Forbidden,连解析的机会都没有

第十一章LAMP架构介绍(下)

 

 

11.29 限制user_agent

有时候网站可能受到cc攻击,攻击者通过一些手段让大量的主机访问网站,导致网站崩溃;cc攻击的特点是user_agent一致

user_agent可以理解为浏览器标识

核心配置文件内容(用到rewrite模块)

   <IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]

        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]

        RewriteRule  .*  -  [F]

    </IfModule>

#OR作为连接符,或者的意思,

#NC表示忽略大小写

#F表示Forbidden;RewriteRule  .*  -  [F]意思是直接Forbidden

 

 

curl -A "123 123"   #-A表示模拟指定user_agent

curl -A "123 123" -x127.0.0.1:80 'http://www.123.com/123.php' -I

#状态为200

[[email protected] www.123.com]# curl -A "a" -x127.0.0.1:80 'http://www.123.com/123.php' -I

HTTP/1.1 200 OK

Date: Fri, 14 Sep 2018 01:58:38 GMT

Server: Apache/2.4.34 (Unix) PHP/7.1.6

X-Powered-By: PHP/7.1.6

Content-Type: text/html; charset=UTF-8

 

查看访问日志可看到user_agent变成 a

127.0.0.1 - - [14/Sep/2018:09:58:38 +0800] "HEAD http://www.123.com/123.php HTTP/1.1" 200 - "-" "a"

 

 

11.30/11.31 php相关配置

 

#精确查看网站php.ini配置文件位置方法

1、先去网站根目录下

cd  /data/wwwroot/www.123.com

 

2、创建一个phpinfo的页面

vim 123.php

内容如下:

<?php

phpinfo();

?>

 

3、通过浏览器访问1.php的phpinfo页面查看php.ini的位置

如果发现配置文件没有加载,可以去php7的源码包目录下复制一个配置文件

cd /usr/local/src/php-7.1.6/

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

 

然后重新加载httpd配置文件graceful

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

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

 

然后刷新页面,找到Loaded Configuration File就可以了

第十一章LAMP架构介绍(下)

4、找到php.ini的路径,然后修改这个配置文件就行了

 

php配置文件相关操作

1、

date.timezone

#要定义这个时区,不然可能会有一些告警信息

Asia/Shanghai               #定义时区到上海

 

2、

#限定函数(禁用)

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(一般企业会把phpinfo这个函数也禁掉)

 

php日志相关的操作

一、配置错误日志

1、

display_errors  #on开启状态,会直接把错误信息显示在浏览器上面(会把该网页的目录暴露出来),要改为off,改为off后需要配置错误日志

2、

log_errors  默认是on,所以我们需要定义error_log来存放错误日志路径,

error_log   /tmp/php_errors.los

3、

还需定义错误级别 error_reporting

默认是E_ALL,所有错误都纪录

生产环境当中一般用E_ALL & ~E_NOTICE(所有错误除了notice错误),将开头的#号去掉就行

 

注意:

#如果没有生成error_log,要检查定义配置文件的目录是否有写权限,而且写文件的人是Apache,即daemon

 

#保险起见,可以直接在错误日志文件目录下创建错误日志,添加777权限,

touch  /tmp/php_errors.log; chmod 777 /tmp/php_errors.log

chown  daemon:daemon   /tmp/php_errors.log

 

二、限制网站目录open_basedir 

一台服务器有多个站点,某个站点写的差,漏洞很多,被被人黑了拿到了服务器权限,,通过该网站的目录,可能导致其他站点被黑

open_basedir       #定义受限制目录

 

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

#修改php配置文件针对的是所有站点,如果是针对单个站点的,应该修改虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf

 

1、针对全部站点,修改PHP配置文件

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

open_basedir /data/wwwroot/www.123.com:/tmp

#添加受限制目录

#默认临时文件是放在/tmp/目录下

 

检查语法-t,然后重载graceful

 

curl -A "a" -x127.0.0.1:80 http://www.123.com/2.php -I

#状态码200正常

 

若是将open_basedir的目录放在/data/wwwroot/www.123456.com:/tmp

curl -A "a" -x127.0.0.1:80 http://www.123.com/2.php -I

#状态码500

 

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

 

 

2、针对单个站点,修改虚拟主机配置文件

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

php_admin_value open_basedir "/data/wwwroot/www.123.com:/tmp/"

#在中间插入上面这行

 

检查语法-t,然后重载graceful

 

curl -A "a" -x127.0.0.1:80 http://www.123.com/2.php

 

 

 

11.32 php动态扩展模块安装

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

 

下面安装一个redis的模块

1、下载包

cd /usr/local/src/

wget  https://codeload.github.com/phpredis/phpredis/zip/develop

 

2、将包改为.zip后缀,并解压

mv develop phpredis-develop.zip

unzip phpredis-develop.zip

 

3、生成configure文件

cd phpredis-develop

/usr/local/php7/bin/phpize     #生成configure

 

4、编译模块包

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

make && make install

 

5、编辑php.ini配置文件,加载redis模块

/usr/local/php7/bin/php -i |grep extension_dir 

#查看扩展模块存放目录,我们可以在php.ini中去自定义该路径

 

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

#增加一行配置(可以放到文件最后一行)

extension = redis.so

 

错误:Cannot find autoconf. Please check your autoconf installation and the

$PHP_AUTOCONF environment variable. Then, rerun this script.

解决:yum install -y autoconf

 

免下载编译扩展模块方法

如果php源码包的/ext/目录下有zip这个目录,那可以跳过下载解压步骤,直接从生成configure文件开始(需要在zip目录下进行)

cd /usr/local/src/php-7.1.6/ext/zip

 

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

 

make && make install

相关文章: