第十九课预习笔记

11.25 配置防盗链

为了防止别人盗用你的网站上的资源,这些资源通常是指图片、视频、歌曲、文档等,配置防盗链是非常有必要的。

配置防盗链是对referer做的一些操作。配置防盗链方法:

1、编辑虚拟配置文件,添加以下内容。

其中:

        SetEnvIfNoCase Referer "http://111.com" local_ref
        SetEnvIfNoCase Referer "http://aaa.com" local_ref
        #SetEnvIfNoCase Referer "^$" local_ref

#访问的referer白名单。^$表示空referer,先把它注释掉不用。

        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>

#filemarch定义需要保护的文件,

#Order Allow,Deny 定义了访问控制顺序,这里表示先allow。

#Allow from env=local_ref 对上面白名单中的referer先允许,其它的deny掉。

2、测试。

在浏览其中直接访问111.com/baidu.png,会直接Forbidden。

我们用百度来作为 111.com/baidu.png 的referer。在百度中直接搜索 111.com/baidu.png 它会给你一个直接访问该站点的超链接。

点击访问仍然是Forbidden,这时我们可以把百度加入到referer白名单中,让她可以作为 111.com/baidu.png 的erferer白名单这样一来就可以正常跳转到 111.com/baidu.png了。

用curl测试。

curl命令 -e 选项可以为访问添加模拟referer。

用www.qq.com作为referer,出现403错误。改为111.com则显示正常。

 

11.26 访问控制Directory

对于一些比较重要的网站内容,除了可以使用用户认证限制访问之外,还可以通过限制IP来限制访问。

在访问配置中添加内容:

其中:

<Directory /data/wwwroot/111.com/admin/>    指定访问的目录。

Order deny,allow    指定执行deny和allow的顺序,deny在前面就先执行下面的deny语句。

 Deny from all    deny所有来源IP。
 Allow from 127.0.0.1    在允许指定的源IP。

创建/data/wwwroot/111.com/admin/ 访问目录,添加文件1.php

用源IP为:127.0.0.1 和 192.268.37.200 分别访问,结果为:127地址允许,192的被拒绝。

同样用浏览器访问,也会被拒绝。若要不被拒绝可以把浏览器访问的源IP添加allow,这里应该是服务器的网关192.168.37.1。

查看访问日志可以看到,第一次访问被拒绝,第二次正常访问。

 

11.27 访问控制FilesMatch

访问控制除了目录,还可以对文件进行访问控制,用filesmatch语句。

测试访问,可以看到除了127.0.0.1外会被forbidden。

 

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

对于一些php语言编写的网站,有些目录是需求上传图片的,但该目录有时会被黑客植入php代码写的木马,由于网站可以执行php程序,会被黑客获取到服务器权限。为了避免这种事情发生,我们可以限定某个目录禁止解析php。

1、配置方法为:

其中:

        <FilesMatch (.*)\.php(.*)>
        Order allow,deny
        Deny from all
        </FilesMatch>

表示禁止获取查看网站上的php代码。

2、测试访问upload目录中的php代码。

 

11.29 限制user_agent

user_agent,可以理解为浏览器标识。

1、主要配置:

其中:

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>

OR:user_agent配置第一个或第二个,两者是或者的关系。

NC:忽略大小写差别。

F:表示直接Forbidden掉。

2、测试访问,因为屏蔽了curl,所以用curl访问会forbidden,从日志文件中可以看到访问受限。

3、我们还可以用curl命令的 -A 选项来模拟user_agent,来访问httpd。

命令:curl  -A "liang liang" -x127.0.0.1:80 111.com/index.php

 

11.30-11.31 PHP相关配置

php配置文件,我们可以用 /usr/local/php/bin/php -i|grep -i "loaded configuration file" 找到配置文件目录。

从php源码包中拷贝配置文件到 /usr/local/php/bin/php/etc 目录下。

cp /usr/local/src/php-7.1.6/php.ini-development /usr/local/php/etc/php.ini

1、禁用函数配置。

disable_functions

对于一些比较危险的函数,我们可以禁用掉,一般在生产环境中phpinfo函数是被禁用的。

禁用掉phpinfo函数后,在浏览器中使用phpinfo的程序是无法执行的。

2、设置date.timezone。

在配置文件中找到date.timezone,设置成Asia/Shanghai,时区不设置会有些告警信息。

3、日志相关的配置。

我们禁用掉phpinfo后提示信息打印到浏览器上,这样会暴露些目录信息,对diaplay_error=Off 配置可以不显示提示信息。

用curl访问没有任何输出,

这时需要配置一个错误日志。

开启错误日志。

定义错误日志路径。

定义error_log级别,如果级别较高的话,它会记录不太严谨的信息,在生产环境中我们不需要 E_ALL 级别,可以定义 E_ALL & ~E_NOTICE 就可以了。

错误日志文件 /tmp/php_errors.log 的属主属组一定是httpd服务的执行user,如果发现没有记录错误日志,可能是日志文件的属主属组没有写文件的权限。所以,在开启错误日志文件后我们首先把它的权限设置成 777 这样httpd的运行用户就可以有写的权限了。

[root@liang-00 ~]# curl  -A "liang liang" -x127.0.0.1:80 111.com/index.php
[root@liang-00 ~]# ls /tmp/php_errors.log 
/tmp/php_errors.log
[root@liang-00 ~]# cat /tmp/php_errors.log 
[07-Dec-2018 03:44:36 Asia/Shanghai] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2
[root@liang-00 ~]# ll /tmp/php_errors.log 
-rw-r--r-- 1 daemon daemon 145 Dec  7 03:44 /tmp/php_errors.log
[root@liang-00 ~]# 

当禁用掉phpinfo函数时,错误日志会是 Warning: 级别的错误告警。如果是语法错误,那就是error级别的了。

[root@liang-00 ~]# curl  -A "liang liang" -x127.0.0.1:80 111.com/2.php
[root@liang-00 ~]# cat /tmp/php_errors.log 
[07-Dec-2018 03:44:36 Asia/Shanghai] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2
[07-Dec-2018 03:54:41 Asia/Shanghai] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 3
[root@liang-00 ~]# 

4、安全相关的配置open_basedir。

open_basedir主要来定义站点隔离。一台服务器上运行了很多的站点,可能会出现某个站点出现安全问题,这样会影响到其它站点。

在php.ini配置文件中有相关的参数。

但是,一般我们不在PHP.ini中限制站点访问目录,而是在vhosts 中设置。

php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/"

在vhosts中可以定义php.ini相关的参数,open_basedir就是其中一个。

/tmp目录是默认存放访问该站时的临时缓存文件,要加入限制目录中。

 

11.32 PHP扩展模块安装

php安装完成后,有些模块是没有安装的,在这种情况下可以用扩展模块的形式添加模块。

编译redis模块,redis是一个nosql,一般是在lamp作为缓存用。

步骤:

1、下载编译resdis。

• 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

make install 会把redis.so文件放在指定的目录下。

2、在php中加载redis模块。

查看扩展模块存放默认目录,可以在php.ini中自定义该路径。

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

[root@liang-00 phpredis-develop]# /usr/local/php7/bin/php -i |grep extension_dir
extension_dir => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303 => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303
sqlite3.extension_dir => no value => no value
[root@liang-00 phpredis-develop]# 

extension_dir可以自定义。所有的扩展模块都会放在此目录中。

在php.ini中添加redis模块。

 

在php的源码包ext目录中存在模块,就可以直接编译。

转载于:https://my.oschina.net/u/3993922/blog/2980833

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值