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/

相關文章
相關標籤/搜索