限定某個目錄禁止解析php,限制user_agent, php相關配置

限定某個目錄禁止解析php:

  • 對於使用php語言編寫的網站,有一些目錄是有需求上傳文件的。若是網站代碼有漏洞,讓黑客上傳了一個用PHP寫的木馬,因爲網站能夠執行PHP程序,最終會讓黑客拿到服務器權限。
    爲了不這種狀況發生,咱們須要把能上傳文件的目錄直接禁止解析PHP代碼
    1.編輯虛擬主機配置
#進入虛擬主機配置文件
[root@aminglinux 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#增長下列配置
<Directory /data/wwroot/111.com/upload> //把upload目錄下全部的php禁止解析
        php_admin_flag engine off //表示禁止解析php
## 增長下面的(兩個F之間的)後,全部訪問php都會是403
   <FilesMatch (.*)\.php(.*)> 
      Order allow,deny                
       Deny from all
    </FilesMatch>   
</Directory>

2.檢查讀寫並重啓服務php

[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3.建立須要禁止解析php的目錄,並把1個php文件放在目錄下html

[root@aminglinux ~]# cd /data/wwroot/111.com/
[root@aminglinux 111.com]# ls
123.php  admin  qq.png  u=3062734635,4183904616&fm=96.jpg
[root@aminglinux 111.com]# mkdir upload/
[root@aminglinux 111.com]# ls
123.php  admin  qq.png  u=3062734635,4183904616&fm=96.jpg  upload
#在目錄下建立一個php文件
[root@aminglinux 111.com]# cp 123.php  upload/

4.訪問這個文件,這裏顯示了403。當咱們訪問另外一個目錄的php文件的時候,顯示能直接訪問,因此這個限制解析php是指定了目錄的,不影響咱們其它目錄。linux

[root@aminglinux 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Mon, 08 Jan 2018 16:26:54 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
#當咱們訪問其餘目錄的php文件
[root@aminglinux 111.com]# curl -x192.168.10.120:80 '111.com/123.php'
123.com[root@centos001 111.com]#

5.註釋掉後面加的代碼的時候會出現什麼情況呢,開始說到禁止解析php只須要最前面的就能夠了。shell

#進入虛擬主機配置文件並註釋掉
    <FilesMatch (.*)\.php(.*)> 
       Order allow,deny                
       Deny from all
    </FilesMatch>   
#檢查讀寫並重啓服務
#再次訪問目錄下的php文件
[root@aminglinux 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php'
<?php
echo "123.com";

6.這裏能看到直接顯示源代碼了,看起來不太美觀apache

 

限制user_agent:

  • **什麼是user_agent?**答:能夠理解爲瀏覽器標識
  • 瞭解cc攻擊 CC是指攻擊者藉助代理服務器生成指向受害主機的合法請求,實現DOS和假裝。CC攻擊主要針對WEB應用程序比較消耗資源的地方進行瘋狂請求,好比,論壇中的搜索功能,若是不加以限制,任由人搜索,普通配置的服務器在幾百個併發請求下,MYSQL服務就會癱瘓
  • 爲什麼要限制 user_agent? 答:防止網站被cc攻擊。這種攻擊有很明顯的規律,這些惡意請求的user_agent相同或類似,咱們就能經過限制user_agent發揮防攻擊做用

1.修改虛擬主機配置文件。本例意爲當user_agent匹配到curl或者baidu.com時,都會觸發規則顯Forbiddenvim

<IfModule mod_rewrite.c> //此處加載了一個模塊
        RewriteEngine on 
#NC表示忽略大小寫,OR表示或者,F至關於Forbidden
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]//
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
</IfModule>

2.檢查讀寫並重啓服務。:要是沒有加載模塊還要去主配置文件裏面加載哦centos

[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3.訪問。由於有curl觸發了規則因此輸出403瀏覽器

[root@aminglinux 111.com]# curl -x192.168.10.120:80 'http://111.com/123.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 /123.php
on this server.<br />
</p>
</body></html>

4.curl -A "123123" 指定user_agent安全

[root@aminglinux 111.com]# curl -A "123123" 192.168.10.120:80 '111.com/123.php'
abc.com

 

PHP相關配置:

查看php配置文件的位置bash

  • 第一種經過瀏覽器,訪問phpinfo找到配置文件的路徑(最準確)
  • 第二種/usr/local/php/bin/php -i|grep -i "loaded configuration file" ;可是有些狀況「php -i 」是不許的,由於Apache他是調用了php 的一模塊,並且「php -i」 只是php 的一個程序,它和libphp5.so可能有關係也可能沒有關係;
[root@aminglinux ~]# cd /data/wwroot/111.com/
[root@centos001 111.com]# ls
123.php  index.php
[root@aminglinux 111.com]# vi index.php 
[root@aminglinux 111.com]# cat index.php 
<?php
phpinfo();

  • 有時候瀏覽器能看到配置文件的路徑可是沒有加載。因此咱們就要去拷貝一個配置文件
cp php.ini-development /usr/local/php/etc/php.ini
#刷新瀏覽器不成功,能夠再重啓下服務
  • 這個就是咱們的配置文件了/usr/local/php7/etc/php.ini

  修改php配置文件

  • 1.disable_functions 安全函數,如下函數會直接調去linux系統命令,開放將會很危險,所以要禁掉。
#打開配置文件
vim /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能夠添加到最後面
  • 示例1:禁用phpinfo。 在安全函數後面添加phpinfo,重啓生效後用瀏覽器訪問。由於不由止的話,在網頁上就會顯示不少咱們的目錄信息。

2. date.timezone 定義時區。
不定義的話有時會出現一些警告信息

#進入配置文件
[root@aminglinux 111.com]# vim /usr/local/php7/etc/php.ini
#搜索date.timezone
#修改成date.timezone = Asia/Shanghai
#搜索display
修改成display_errors = Off

3.配置error_log (錯誤日誌)

剛纔咱們禁用phpinfo的時候,瀏覽器輸出了一段錯誤信息。這個就是php開啓了錯誤日誌的輸出功能,可是開啓以後呢,咱們的有些東西就會泄露出去。因此下面咱們將介紹怎麼設置錯誤日誌的路徑、級別和類型等

#進入配置文件
1.開啓error_log
#搜索 log_errors 
修改成log_errors = Off      on = 打開    off = 關閉

2.定義錯誤日誌的文件路徑
#搜索error_log
修改成error_log = /tmp/php_errors.log

3.定義錯誤日誌的級別,這裏咱們選擇的是最不嚴謹的。E_NOTICE爲生產環境中所選的
#搜索error_reporting
修改成error_reporting = E_ALL
#保存退出後,檢查讀寫並重啓服務。查看路徑有沒有生成,訪問下或者刷新一下網頁
[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@aminglinux 111.com]# cd /tmp 
[root@aminglinux tmp]# ls
php_errors.log //生成的文件

查看php_errors.log文件,會看到屬主屬組是daemon

[root@aminglinux tmp]# ls -l /tmp/php_errors.log 
-rw-r--r--. 1 daemon daemon 432 1月   9 04:53 /tmp/php_errors.log

daemon其實是httpd的屬主,php_errors.log日誌文件是以httpd這個進程的身份去生成的

[root@aminglinux tmp]# ps aux |grep httpd
root      2323  0.0  1.4 267872 14384 ?        Ss   1月08   0:15 /usr/local/apache2.4/bin/httpd -k start
daemon   24263  0.0  0.8 554700  8644 ?        Sl   04:46   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   24264  0.0  0.8 554700  8644 ?        Sl   04:46   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   24267  0.0  1.1 687884 11172 ?        Sl   04:46   0:00 /usr/local/apache2.4/bin/httpd -k start
root     24363  0.0  0.0 112676   984 pts/1    R+   04:55   0:00 grep --color=auto httpd
  • 有時候,定義了一個錯誤日誌,可是這個錯誤日誌始終沒有生成,那麼就須要檢查一下定義錯誤日誌所在的目錄,到底httpd有沒有寫權限
  • 最保險的辦法,就是在所在目錄建立一個錯誤日誌的文件,而後賦予它777的權限,這樣就不須要擔憂這個文件httpd是否有寫權限了
[root@aminglinux tmp]# grep error_log /usr/local/php/etc/php.ini
; server-specific log, STDERR, or a location specified by the error_log
; Set maximum length of log_errors. In error_log information about the source is
;error_log = php_errors.log
;error_log = syslog
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=
[root@aminglinux tmp]# touch /tmp/php_errors.log ; chmod /tmp/php_errors.log
  • 查看錯誤日誌文件
    [root@aminglinux tmp]# cat /tmp/php_errors.log
    [09-Jan-2018 04:43:15 Asia/Shanghai] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwroot/111.com/index.php on line 2

     

  • open_basedir = /data/wwroot/111.com:/tmp

    open_basedir安全相關項

    一臺服務器上有多個網站運行,這樣作的弊端是若是其中一個被黑。其它的也有可能被連累

  • open_basedir就恰好能解決這個問題,它的做用是將網站限定在指定目錄裏,就算被黑也波及不到其餘目錄
  • php.ini文件中的內容是針對全部虛擬主機進行的配置 1.修改配置文件
[root@aminglinux tmp]# vim /usr/local/php7/etc/php.ini
#搜索open_basedir
修改成open_basedir = /data/wwroot/111.com:/tmp

2.檢查讀寫並重啓服務
3.正常訪問的話,直接就能訪問
4.如果服務器上跑了N多個站點,那應該怎麼去作限制呢?
應該針對站點,這些網站去作open_basedir ,但php.ini是作不到的,由於php.ini是針對全部站點的 但咱們能夠在虛擬主機配置文件中設置,在apache虛擬主機配置文件中去設置/usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@aminglinux tmp]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#增長 保存並退出
php_admin_value open_basedir "/data/wwroot/111.com:/tmp/"

 

 

 

擴展

apache開啓壓縮 http://ask.apelearn.com/question/5528
apache2.2到2.4配置文件變動 http://ask.apelearn.com/question/7292
apache options參數 http://ask.apelearn.com/question/1051
apache禁止trace或track防止xss http://ask.apelearn.com/question/1045
apache 配置https 支持ssl http://ask.apelearn.com/question/1029

相關文章
相關標籤/搜索