訪問控制,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

相關文章
相關標籤/搜索