開發安全應用的原則
1.深度防范(冗余,謹慎過頭了)
2.最小權限(分配盡量少的權限)
3.簡單就是美(復雜容易出錯,出錯導致漏洞)
4.暴露最小化(隱藏關鍵資料)
等等等等
方法
1.平衡風險與可用性
用戶操作的友好性與安全措施比較矛盾,在提高安全性的同時,通常會降低可用性(操作麻煩,步驟繁瑣),
盡量使安全措施對用戶透明,或采用用戶熟悉的方式,比如在用戶訪問受控資訊前需要輸入用戶名和密碼來確認身份,
2.跟蹤資料
(資料從哪來,要到哪去)在代碼審計中,主要檢查代碼中與外部互動的部分,
3.過濾輸入
4.轉義輸出
代碼審計
漏洞形成的條件:
1.可控變數(一切輸入都是有害的)
2.對變數進行操作的函式(一切進入函式的變數都是有害的)
漏洞的利用效果取決于最終函式的功能,變數進入什么樣的函式就導致什么漏洞
檔案包含---->包含漏洞
代碼執行---->執行任意代碼漏洞
命令執行---->執行任意命令漏洞
檔案系統操作---->檔案(目錄)讀寫等漏洞
資料庫操作---->SQL注射漏洞
資料顯示 ---->XSS等客服端漏洞
代碼審計本質
找漏洞==找對應變數與函式
變數跟蹤的程序
通過變數找函式[正向跟蹤變數]
通過函式找變數[逆向跟蹤變數]
變數的傳遞與二次漏洞
變數存盤、提取、傳遞是一個復雜的立體的程序,程序中經過多個不一樣的函式的處理后繼續傳遞,最終達到漏洞函式,傳遞的程序中任意環節可控就可能導致漏洞,中間函式處理的程序誕生新的變數,新的變數達到新的漏洞函式?誕生新的漏洞[二次漏洞]
變數
$_SERVER
$_GET $_POST
$_COOKIE
$_REQUEST
$_FILES $_ENV
$_HTTP_COOKIE_VARS
$_HTTP_ENV_VARS
$_HTTP_GET_VARS
$_HTTP_POST_FILES
$_HTTP_POST_VARS
$_HTTP_SERVER_VARS*
在PHP中這些變數可由用戶輸入,應對這些變數進行檢查,各個變數(函式)的含義用法可在手冊中查看
手冊地址:
https://www.php.net/manual/zh/reserved.variables.server.php
函式
我們通過在全部程式檔案中搜索這些函式,確定函式的引數是否會因為外部提交而改變,
檢查這些引數是否有經過安全處理,
命令注入
system、exec、passthru、``、shell_exec、popen、proc_open、pcntl_exec
防范方法:
1.使用自定義函式或函式庫來替代外部命令的功能
2.使用 escapeshellarg 函式來處理命令引數
3.使用 safe_mode_exec_dir 指定可執行檔案的路徑
XSS
反射型跨站,因為是立即輸出顯示給客戶端,所以應該在當前的 php 頁面檢查變數被
客戶提交之后有無立即顯示,在這個程序中變數是否有經過安全檢查,
存盤型跨站,檢查變數在輸入后入庫,又輸出顯示的這個程序中,變數是否有經過安
全檢查,
echo、print、printf、vprintf、<%=$test%>
防范方法:
1.如果輸入資料只包含字母和數字,那么任何特殊字符都應當阻止
2.對輸入的資料經行嚴格匹配,比如郵件格式,用戶名只包含英文或者中文、下劃線、連字符,對輸出進行 HTML 編碼
檔案包含
include、include_once、require、require_once、show_source、highlight_file、readfile、file_get_contents、fopen、file
防范方法:
1.對輸入資料進行精確匹配,比如根據變數的值確定語言 en.php、cn.php,那么這兩個檔案放在同一個目錄下’language/’.$_POST[‘lang’].’.php’,那么檢查提交的資料是否是 en 或者 cn 是最
嚴格的,檢查是否只包含字母也不錯
2.通過過濾引數中的/、…等字符
代碼注入
eval、preg_replace+/e、assert、call_user_func、
call_user_func_array、create_function
防范方法:
1.輸入資料精確匹配
2.白名單方式過濾可執行的函式
SQL注入
SQL 注入因為要操作資料庫,所以一般會查找SQL 陳述句關鍵字:
insert、delete、update、select,
查看傳遞的變數引數是否用戶可控制,有無做過安全處理
防范方法:
引數化查詢,預編譯
XXE
Xpath
HTTP回應拆分
使用 header 函式和使用**$_SERVER變數**,注意:PHP 的高版本會禁止 HTTP 表頭中出現換行字符,這類可以直接跳過本測驗,
檔案上傳
PHP 檔案上傳通常會使用 move_uploaded_file,也可以找到檔案上傳的程式進行具體分析
防范方法:
1.使用白名單方式檢測檔案后綴
2.上傳之后按時間能演算法生成檔案名稱
3.上傳目錄腳本檔案不可執行
4.注意%00截斷
檔案類函式
copy、rmdir、unlink、delete、fwrite、chmod、
fgetc、fgetcsv、fgets、fgetss、file、file_get_contents、fread、readfile、ftruncate、file_put_contents、
fputcsv、fputs,
通常 PHP 中每一個檔案操作函式都可能是危險的,
注意
真實環境中可能會有用戶自定義的函式,根據實際情況進行判斷
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297079.html
標籤:其他
上一篇:華為ACL
下一篇:運行SHA256加密腳本.
