访问控制,php动态扩展模块

配置防盗链

“盗链”的定义是:此内容不在本身服务器上,而经过技术手段,绕过别人放广告有利益的最终页,直接在本身的有广告有利益的页面上向最终用户提供此内容。 经常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(好比一些音乐、图片、软件的下载地址)而后放置在本身的网站中,经过这种方法盗取大网站的空间和流量。php

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

配置文件增长以下内容/usr/local/apache2.4/conf/extra/httpd-vhosts.conflinux

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias abc.com www.example.com 2111.com.cn
#<Directory /data/wwwroot/abc.com> 
#    AllowOverride AuthConfig 
#    AuthName "abc.com user auth" 
#    AuthType Basic 
#    AuthUserFile /data/.htpasswd 
#    require valid-user 
#    </Directory>
  
  <Directory /data/wwwroot/abc.com>
        SetEnvIfNoCase Referer "http://abc.com" local_ref   //配置白名单
        SetEnvIfNoCase Referer "http://abc.com" local_ref
        SetEnvIfNoCase Referer "^$" local_ref                    //表示空referer
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
    </Directory>

访问控制-Directory

  • 核心配置文件内容

<Directory /data/wwwroot/www.abc.com/>
        Order deny,allow                   //deny和allow 谁在前面谁先生效
        Deny from all
        Allow from 127.0.0.1
    </Directory>
  • curl测试状态码为403则被限制访问了


访问控制 – FilesMatch 匹配控制文件

功能和Directory基本一致,能够更灵活的控制git

  • 配置以下:

<Directory /data/wwwroot/www.123.com>
    <FilesMatch  "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

apache几种限制ip的方法

  1. 禁止访问某些文件/目录 增长Files选项来控制,好比要不容许访问 .inc 扩展名的文件,保护php类库:github

  2. 禁止访问某些指定的目录:(能够用 来进行正则匹配)redis

固然也能够写目录全局路径shell

  1. 经过文件匹配来进行禁止,好比禁止全部针对图片的访问:apache

  2. 针对URL相对路径的禁止访问vim

参考文档来源: http://jingyan.baidu.com/article/4b07be3c193d1648b380f3a9.html浏览器


禁止php解析

防止黑客上传下载或者攻击Apache,普通用户能够上传图片或者文件到服务器,data目录可写,若是是木马文件,点击后服务器就会被入侵,该怎么避免?不容许用户上传文件不可能,只能上传后不容许用户作任何操做,限制对其进行解析。

  • 核心配置文件内容
<Directory /data/wwwroot/www.abc.com/upload>
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        Order allow,deny
        Deny from all
        </FilesMath>
    </Directory>
  • curl测试时直接返回了php源代码,并未解析

访问控制 – user_agent

  • user_agent能够理解为浏览器标识

  • 核心配置文件内容

<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]       //NC是不区分大小写,OR是或者的意思,没有OR就是而且的意思
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
  • curl -A "123123" 能够模拟user_agent,绕过限制

PHP相关配置

  • 首先查看php配置文件位置

找到 /data/wwwroot/abc.com/index.php 文件编辑成

<?php
phpinfo();

而后用浏览器访问abc.com ,看到php的详细页面。能够看到配置文件所在目录/usr/local/php7/etc,但实际上没有加载。

copy配置文件

[root@aminglinux-01 php-5.6.30]# cd /usr/local/src/php-7.1.6/
[root@aminglinux-01 php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini
[root@aminglinux-01 php-7.1.6]#

从新加载下php

浏览器刷新就能看到有加载的配置文件了。

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

  • 限制安全函数 disable_functions

找到 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

最后面的phpinfo 若是加上就不能访问php的页面了,为了避免暴露文件夹等。可是仍是会在访问的时候报一个错误。这个错误依然暴露了一个文件夹目录。

  • 定义时区date.timezone,若是不定义有时候会出现一些告警信息
date.timezone = Asia/Shanghai
  • 上面说为了安全,开启了禁用phpinfo,可是仍是有一条报错,这时候若是在配置文件里面有一个display_errors on 改为off 。访问页面就变成了空白页面。这样就更安全了,可是会有新的问题,都是空白页面,谁也不知道发生了什么。因此须要配置一个错误日志。

  • log_errors = On 这个是错误日志已经开启

  • 自定义错误日志路径:error_log

error_log = /tmp/php_errors.log
  • 更改记录级别, 若是级别高的话只记录一些重大的错误,小的警告不会记录。 error_reporting

默认是E_all

; Common Values:
;   E_ALL (Show all errors, warnings and notices including coding standards.)
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL
  • open_basedir 安全选项,安全隔离,好比A网站被黑了,B网站仍是安全的。

open_basedir = /data/wwwroot/abc.com:/tmp

可是这样也是有缺点的,若是全部站点都在wwwroot下就没什么用了。

还有一种方法是在vhost.conf 里面加上:

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

能够针对不一样的虚拟主机,作open_basedir

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/abc.com"
    ServerName abc.com
    ServerAlias www.abc.com
    php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/"
    ErrorLog "logs/abc.com-error_log"
    CustomLog "logs/abc.com-access_log" common
</VirtualHost>

PHP动态扩展模块

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

  • 下面安装一个redis的模块

一般在lamp这种架构下,把他看成一个缓存来用

[root@aminglinux-01 ~]# cd /usr/local/src/
[root@aminglinux-01 src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop
--2017-10-15 09:19:18--  https://codeload.github.com/phpredis/phpredis/zip/develop
正在解析主机 codeload.github.com (codeload.github.com)... 192.30.255.120, 192.30.255.121
正在链接 codeload.github.com (codeload.github.com)|192.30.255.120|:443... 已链接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [application/zip]
正在保存至: “develop”

    [                       <=>                                                                        ] 224,173     9.93KB/s 用时 22s    

2017-10-15 09:19:42 (10.2 KB/s) - “develop” 已保存 [224173]
  • 改个名字 mv develop phpredis-develop.zip
  • 解压 unzip phpredis-develop.zip
  • 进这个目录 cd phpredis-develop
  • /usr/local/php7/bin/phpize //生成configure文件,没有这个文件不能编译
[root@aminglinux-01 phpredis-develop]# /usr/local/php7/bin/phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

报错了。装一个包

yum install -y autoconf
  • ./configure --with-php-config=/usr/local/php/bin/php-config

  • make && make install

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

  • vim /usr/local/php/etc/php.ini //增长一行配置(能够放到文件最后一行) extension = redis.so

相关文章
相关标签/搜索