PHP web 安全

lankecms發表於2016-02-05

web安全

1.表單測試:

空白字元,控制字元,非字母資料(如符號&,*等),超長輸入(大於256個字元),留言版垃圾,二進位制資料,其他編碼資料(如ASICII,UTF-8,十六進位制,八進位制等),SQL諸如,XSS

處理:設定長度規則(合法使用者不會寫小說),若能發郵件的地方只能一次一個發一人,錯誤處理進行重定向或錯誤提示,

2.系統呼叫:exec(),sysetem(),backtick。

1.部署的正式環境去掉sudo命令(禁止該命令)

2.使用escapeshellcmd(),escapeshellarg()進行轉義保護系統呼叫,

3.使用固定方式呼叫系統命令,封裝api,如將exec()來移動檔案封裝為只接受檔名的函式呼叫,避免直接呼叫,讓api功能單一,exec()帶太多額外不方便檢測,如只接受檔名的函式則更容易檢測變數是否滿足條件

4.驗證使用者的輸入

3.緩衝區溢位:

當載入程式後,程式會被儲存在記憶體中,記憶體其他部分也就是緩衝區,將被用來儲存程式資料(作為全域性變數儲存)、任何程式設計的函式庫以及兩個資料結構(堆疊和堆),堆疊是從下往上填充,若引數大於引數的緩衝區所準備的空間,它將覆蓋下一個可用的記憶體地址,返回地址緩衝區,於是返回結果可能為一段惡意結構,

4.密碼強度:

1.避免任何語言的字典單詞

2.使用大小寫字母或其他字元組合

3.密碼長度大於6-8位,可以更多

4.建立密碼提示符代替答案,如一句話的首寫字母

5.定期修改密碼

6.是否以加密的方式儲存密碼

7.儲存密碼的資料庫是否安全

7.若賬戶可以傳送郵件,是否實現了驗證碼來過濾避免自動指令碼建立賬戶

5.會話安全:會話固化,會話劫持,會話毒化(注入)

6.xss跨站攻擊(htmlspecialchars, strip_tags),sql注入(mysql_real_escape_string, addslashes),csrf,掛馬,危險指令碼(如phpinfo這種暴露版本資訊),遠端檔案包含allow_url_include=Off,管理後臺洩露(單一入口在目錄,其他php不再web目錄),身份許可權驗證

7.apache配置:

php.ini中disable_functions可以禁用php函式(如disable_functions = phpinfo,gzcompress,apache_note,apache_setenv,proc_get_status,exec,passthru,proc_nice,proc_open,proc_terminate,shell_exec,system,popen,ini_restore,syslog,define_syslog_variables,symlink,link,error_log,leak,dbmopen,openlog,closelog,popen,pclose,stream_socket_server)

1.隱藏版本資訊和http頭資訊:ServerSignature Off,ServerTokens Prod,隱藏php錯誤(php.ini expose_php = On)

2.目錄遍歷

3.將apache限制在自身目錄結構中,http.conf設定<Directory 目錄> Order….Deny……..</Directory>,在非web目錄不能開啟php指令碼,比如上傳目錄不能執行

4.關閉多於的配置和模組

5.使用ModSecurity包過濾工具(有利有弊,如增加了開銷,還會將空格,點號,左方括號轉換為下劃線等)

額外補充:

Path Traversal(目錄遍歷)

漏洞描述

目錄遍歷指的是應用程式對檔案路徑沒有檢查導致伺服器上的敏感檔案/程式碼洩漏。

安全隱患

可能會導致原始碼等敏感資訊洩露。

修復建議

嚴格檢查檔案路徑引數,限制在指定的範圍。嚴格限制檔案路徑引數,不允許使用者控制檔案路徑相關的引數,限定檔案路徑範圍。

在php.ini中進行如下配置:

open_basedir = 伺服器上WEB目錄的路徑(注,路徑最後需要加上斜槓作為結束),如:open_basedir = /var/www/html/

Directory Indexing(目錄洩露)

漏洞描述

應用伺服器配置不當,導致應用伺服器的目錄列表被展示。

安全隱患

可能會導致敏感資訊或原始碼洩露。

修復建議

配置應用伺服器禁止目錄列表展示。、

apache修改方法:
<Directory “E:/www”>下面的
Options Indexes FollowSymLinks
改成
Options  FollowSymLinks
然後

改成

8.保護MySQL:

1.單機的話則關閉遠端訪問或則只能固定ip訪問

2.修改管理員root使用者名稱且增加密碼不為空

3.為一個應用開啟單獨的賬戶和密碼設定最小化的許可權,如不能刪除資料表等

4.刪除多於的MySQL賬戶和資料庫(如test)

9.php配置php.ini:

1.safe_mod,safe_mod_gid開關

2.open_basedir,safe_mode_exec_dir

3.expose_php,register_globals,session_cookie_lifetime

4.diplay_errors

5.遠端檔案開啟等

10.Fuzz測試:PowerFuzzer,測試工具集:CAL9000

相關文章