6月1日任務

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

11.30/11.31 php相關配置

限定某個目錄禁止解析php


數據泄露可能性

①網站php程序漏洞

②sql注入漏洞:可以把查詢的sql,通過特殊提交到服務器上,服務器會把sql語句轉換成正常查詢,最終獲得一些數據(容易修復,只要在網站提交的入口增加特殊符號過濾,達到阻斷效果)

實例:


第一個大括號和第二個大括號之間的表示對/upload目錄禁止解析php,防止被黑客等人拿到權限調走數據

第二個大括號則是對files match訪問控制,讓外界對這個/upload目錄無法訪問

測試:

①加了兩層限制後的403 Forbidden


②只針對某個目錄禁止解析php:如下圖顯示的是源代碼,不解析


可寫的目錄(靜態文件),一般情況下不需要解析php,一般靜態文件所存放的目錄下不允許放php

限制user_agent


在網站受到SYS攻擊時(攻擊人通過一些手段,如軟件,肉機(被黑被控制的機器)同時訪問一個站點)

限制user_agent的過於頻繁訪問請求,減輕服務器壓力


NC表示忽略大小寫 OR或者  F:Forbidden

測試成功

curl -A 再測試確定因爲限制了user_agent



curl -A指定usr_agent  

curl -e 指定referer 必須以“http:// ”開頭

curl -x 省略hosts

curl -I 返回狀態碼,不執行

PHP相關配置


在網站根目錄下通過網頁查看php.info(找php配置文件最準確)

①根目錄下index.php編輯成php.info


②打開111.com/index.php顯示具體頁面信息(雖然配置文件是/usr/local/php7/etc,但是並沒有加載)


③把源碼包的php.ini拷貝到配置文件路徑下,並刷新配置apachectl graceful



④打開配置文件 vim /usr/local/php7/etc/php.ini

disable_functions 禁掉一些危險函數,甚至phpinfo函數,有時不小心寫了phpinfo的頁面上傳到網上,被黑客掃到可以看到系統信息,有潛在的深入挖掘滲透


禁掉後刷新發現phpinfo頁面無法訪問


定義date.timezone(如果不定義可能會有一些報警信息)


日誌相關


因爲有display_errors = On使得之前phpinfo被禁後的錯誤信息直接顯示在網站上 (暴露目錄地址),改成off比較安全,不需要把錯誤信息輸出到瀏覽器中,參數改成Off後再重新加載配置,出現百頁,無錯誤提示


用curl訪問發現沒有任何輸出,這時候需要配置一個錯誤日誌方便以後排錯


配置錯誤日誌信息

①/log_errors = On


②error_log = 定義到某目錄下


③定義error_log的級別,如果不定義只會記錄嚴重的錯誤,不會完全記錄


最不嚴謹的就是所有都生成,然而在生產環境中,Notice很多,所以只要選擇log 錯誤就行了


生成php_errors.log 屬主於daemon,ps aux |grep httpd查看,也是httpd的屬主,實際上以進程的身份生成(應用:如果定義了一個錯誤日誌,但是始終沒有生成,應該排查定義錯誤日誌所在的目錄是否有寫的權限,此處寫文件的“人”是apache所屬主,啓動用戶daemon)


爲了保險起見可以先grep查看錯誤日誌的定義路徑,先touch,再改777權限


cat這個Log發現


模擬一個錯誤:新編輯一個2.php文件(語法錯誤),然後curl後沒有任何提示,再cat發現錯誤詳情


安全相關參數 


open_basedir主要用來限定並隔離站點與站點之間的目錄 (比如一臺服務器跑N個站點,其中一個漏洞多被黑被拿到權限,增加open_basedir  可以避免擴散)

找到open_basedir選項,把文件目錄限制在/tmp下


如果定義錯了,如1111.com看看實驗結果,curl結果是500錯誤, Internal Server Error


查看錯誤日誌: cat /tmp/php_errors.log


改成正確的路徑 /data/wwwroot/111.com:/tmp; curl後正常


如果一個服務器跑N個站點,如何限定?所有網站根目錄都在/data/wwwroot/下,如果限定在這一層不行,又由於php.ini配置文件是針對所有站點生效,所以需要到單個站點上配置open_basedir,即在vhost(apache虛擬主機)配置文件中個性化針對  某站點進行限制

php_admin_value參數可以定義php.ini裏的一些參數(如error_log, error_reporting等等)


限制在/tmp/目錄下的原因是:默認所有臨時文件等都會先保存在/tmp/下,如圖片上傳是先傳到/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

發佈了81 篇原創文章 · 獲贊 0 · 訪問量 4255
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章