【2018.06.01學習筆記】【linux基礎知識11.28-11.31】

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

有這樣一個案例:一個網站的用戶信息被發現泄漏了,剛提交了新的用戶手機號碼,過一會就有人打電話來營銷。php

根據分析有多是SQL注入得到權限,把查詢SQL提交到了服務器上得到後臺數據(能夠在網站入口的地方,增長特殊符號的過濾,能夠阻斷SQL注入的漏洞)。shell

再仔細排查:一、監控數據庫查詢,抓包。每隔一分鐘抓包一次,保存到文件中分析。抓到能夠的SQL查詢,與網站上的原生的SQL查詢不同,定位到時間點,再去看訪問日誌。數據庫

二、訪問日誌有個很是明顯的請求,是執行 在圖片上傳upload目錄下的某個php文件。查看代碼發現是一句話木馬,從而得到了服務器的權限。瀏覽器

三、咱們能夠把該上傳文件的目錄(網站的入口),禁止php解析。安全

<Directory /data/wwwroot/111.com/upload>
    php_admin_flag engine off
</Directory>

禁止解析php後,訪問該目錄下的php文件時,只會返回該php文件的源代碼。服務器

四、還能夠再加多一層防禦:使用訪問控制,禁止訪問該目錄下的php文件curl

<FilesMatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</FilesMatch>

設定訪問控制後,直接會返回403 Forbidden狀態碼。socket

11.29 限制user_agent

user_agent能夠理解爲瀏覽器標識,限制他能夠防止CC攻擊(用軟件或者肉雞)函數

配置以下:網站

<IfModule mod_rewrite.c>  //使用rewrite模塊
  ReWriteEngin on    //打開模塊
  ReWriteCond  %{HTTP_USER_AGENT} .*curl+[NC,OR]  //定義條件 [NC]忽略大小寫,[OR] 兩個條件或匹配
  ReWriteCond  %{HTTP_USER_AGENT} .*baidu.com.* [NC]   //定義條件
  ReWriteRule .* -[F]   //定義規則,[F] 是禁止。
</IfModule>

驗證:

curl -A 「abcde」 -x127.0.0.1:80 '111.com/1.php'

-A選項:指定user_agent。

11.30/11.31 php相關配置

查看php配置文件的位置:

/usr/local/php/bin/php -i |grep -i "loaded configuretion file"  //這個方法有時候不太準確

最好使用phpinfo()函數查看:在網站目錄新建一個phpinfo函數的文件,經過瀏覽器訪問

若是沒有加載php.ini,就從源碼包裏複製一個到/usr/local/php/etc/ 下

修改/usr/local/php/etc/php.ini 配置文件: 一、禁用函數:禁用掉一些比較有風險的函數

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

二、設置時區:

date.timezone=Aisa/ShangHai

三、錯誤日誌相關設置:

display_errors=off  //不顯示錯誤信息,防止網站目錄暴露
log_errors=on  //打開php錯誤日誌
error_log=/tmp/php.errors.log   //定義錯誤日誌的存放路徑。權限要777
error_reporting =E_ALL & -E_NOTICE //定義日誌信息的級別

若是定義了日誌存放目錄,可是沒有生成,檢測日至目錄是否有寫入權限,寫入的用戶是Apache的進程運行用戶,daemon。

四、安全相關的:站點目錄

若是有多個站點運行在一臺服務器中,當A站點被黑,只可以在A站點的目錄下操做,不會影響其餘站點的目錄。可使用open_basedir。

open_basedir=/data/wwwroot/111.com:/tmp //若是是在php.ini下定義,只能定義一個open_basedir,是針對全部站點和臨時目錄

若是要對每一個站點單獨限定相互隔離,能夠在httpd-vhosts.conf 下,在每一個虛擬主機的配置段裏定義:

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp"
相關文章
相關標籤/搜索