天天看點

LAMP(apache禁止解析php,限制user_agent,php配置,open_bashdir

一、apache禁止解析php.

執行個體:假如我們的一個目錄是允許上傳圖檔的,可能有些别有用心的人通過某些手段上傳php檔案上來。也就意味着被執行的檔案,可能是惡意檔案

修改:

[root@abc admin]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

  <Directory /data/wwwroot/111.com/upload>

        php_admin_flag engine off               (打開禁止PHP解析)

        <FilesMatch (.*)\.php(.*)>  (隻要是比對到php結尾的檔案,全部deny掉,雖然已經開啟了php解析,但是如果不加這                                 一行curl的時候會拿到源代碼,這樣不友好)

        Order allow,deny

        Deny from all

        </FilesMatch>

    </Directory>

測試:

如果不加比對檔案哪一行,雖然不解析,但是會下載下傳拿到源代碼:

[root@abc upload]# curl -x192.168.52.100:80 '111.com/upload/index.php' 

<?php 

phpinfo();

?>

不加-I的話會直接拿到源代碼。加上-I會顯示200,如果在浏覽器上則會直接下載下傳檔案。

加上Order:

[root@abc 111.com]# curl -x192.168.52.100:80 '111.com/upload/index.php' -I

HTTP/1.1 403 Forbidden

Date: Sun, 26 Nov 2017 10:16:37 GMT

Server: Apache/2.4.28 (Unix) PHP/5.6.30

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

直接403拒絕通路

二、apache限制user_agent

通路控制user_agent(浏覽器辨別)

執行個體:

有時候我們網站會受到cc攻擊(同時讓1w個肉機攻擊一個網站),就是正常的通路,但是她的通路特别有規律,且user_agent都是一樣的。通過限制user_agent來限制。

也是用rewrite子產品,上次用他實作的域名跳轉

   <IfModule mod_rewrite.c>

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]     OR作為兩個條件的連接配接詞,或者的意思。

        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]         NC表示忽律大小寫 

        RewriteRule  .*  -  [F]

    </IfModule>

檢查文法錯誤并且重新開機服務

驗證:

[root@abc ~]# curl -x127.0.0.1:80 'http://111.com/index.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 /index.php

on this server.<br />

</p>

</body></html>

當用Curl直接通路的時候,顯示403,沒有權利通路,因為限制了curl

[root@abc ~]# curl -A "lty"-x127.0.0.1:80 'http://111.com/index.php' -I

HTTP/1.1 200 OK

Date: Sun, 26 Nov 2017 11:41:37 GMT

X-Powered-By: PHP/5.6.30

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

當修改浏覽器表示為lty時,則通路正常。

檢視日志:

127.0.0.1 - - [26/Nov/2017:19:41:13 +0800] "GET http://111.com/index.php HTTP/1.1" 403 218 "-" "curl/7.29.0"

192.168.52.100 - - [26/Nov/2017:19:41:32 +0800] "GET /index.php HTTP/1.1" 200 80050 "-" "lty-x127.0.0.1:80"

curl -A " "   可以修改user_agent 也就是浏覽器辨別

curl -e " "   可以修改referer 也就是上次一通路的網址

三、php相關配置

檢視php配置檔案位置

還是寫一個phpinfo();的檔案。然後用浏覽器通路,檢視php詳細資訊

LAMP(apache禁止解析php,限制user_agent,php配置,open_bashdir

我們發現php的目錄在,但是它并沒有加載。

我們需要從源碼包的配置檔案裡複制一個

[root@abc php-5.6.30]# cp /usr/local/src/php-5.6.30/php.ini-development /usr/local/php/etc/php.ini

[root@abc php-5.6.30]# /usr/local/apache2.4/bin/apachectl graceful        (重新整理配置)

LAMP(apache禁止解析php,限制user_agent,php配置,open_bashdir

這樣就顯示出來了

修改配置檔案

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

搜尋  disable_functions  安全函數           (一句話木馬裡就用到了eval函數)

危險函數 :

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 

搜尋 date.timezone   定義時區        (如果不定義有時候會有一些告警資訊)

可以定義到上海,或者重慶

date.timezone = Asia/Chongqing

日志相關的

display_errors =  Off         會把你的錯誤資訊顯示到浏覽器上,改成OFF會顯示白頁

log_error =                             打開或關閉錯誤日志

error_log =  /tmp/php_errors.log              定義錯誤日志路徑

error_reporting                          定義錯誤日志的級别(最好定義松一點,否則日志隻會記錄筆記嚴重錯誤)

四、open_bashdir

一個伺服器上跑2個網站,假如一個網站被黑了,另外一個肯定不會幸免于難,如果有open_basedir   ,另外一個網站就不一定會被黑

open_basedir的作用是将網站限定在指定目錄裡,就算該站點被黑,黑客也隻能在該目錄下有所作為,不能左右其他目錄。

A網站和B網站分别在AB兩個目錄裡,A網站被黑了,黑客沒有權限進入B目錄,如果隻有一個網站,那就很有必要做安全選項,因為其他目錄沒有權限進入。

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

open_basedir  = /data/wwwroot/111.com:/tmp/                    (兩個目錄之間用:連接配接)

但是php.info裡包含的是所有的站點,我們也可以在虛拟主機配置檔案裡限制:

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"     要寫上tmp,因為tmp是個臨時檔案存放點,如果連自己的臨時檔案都寫不了,比如上傳一個圖檔,會臨時把圖檔放到tmp下。如果限制了,就不能上傳圖檔了

五、拓展内容:

本文轉自 小新銳 51CTO部落格,原文連結:http://blog.51cto.com/13407306/2054659,如需轉載請自行聯系原作者