1、安全開發-原生PHP-PHP.INI安全
2、安全開發-原生PHP-全局文件&單函數
3、安全開發-原生PHP-流量檢測&AI算法
一、通用-PHP.INI設置
參考:
https://www.yisu.com/ask/28100386.html
https://blog.csdn.net/u014265398/article/details/109700309
https://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/23/2222105.html
安全模式 safe_mode ->命令執行函數會被禁用
*路徑訪問 open_basedir ->限制文件操作安全(遍歷等)->可控制webshell后門查看到的路徑,可以阻止后門遍歷C盤、D盤
*禁用函數 disable_function ->升級版安全模式,自定義限制函數->可限制php一些常見的exec()等命令執行函數
*魔術引號轉義 magic_quotes_gpc ->同理下面的sql過濾第一個函數Addslashes()->為了數據庫查詢語句等的需要在某些字符前加上了反斜線(進行轉義)。這些字符是單引號()、雙引號(”)、反斜線()與NULL字符)。
數據庫訪問次數 max_connections-> 防止數據庫爆破
禁用遠程執行 allow_url_include,allow_url_fopen->遠程包含開關等
*安全會話管理 session.cookie_httponly session.cookie_secure->防止跨站腳本攻擊(XSS)和中間人攻擊(MITM)
二、引用-全局文件
1、關鍵內容檢測(黑白名單)
文件上傳,SQL注入,XSS跨站等
①文件上傳黑名單過濾策略
②文件上傳白名單過濾策略
2、模仿流量檢測(模仿WAF產品(基于規則或AI算法)
演示:Python Flask+PHP Curl+訓練大模型
①客戶端請求數據 -> 中間件搭建平臺 -> 服務器代碼文件處理
②客戶端請求數據 -> WAF或流量監控 (規則,AI模型算法)-> 正常數據 -> 中間件搭建平臺 -> 服務器代碼文件處理
③客戶端請求數據 -> WAF或流量監控 (規則,AI模型算法)-> 異常數據 -> 截止
a、常規設置規則進行檢測:
python代碼監測:在本地架設了一個服務,類似WAF產品(WAF或流量監控 (通過設置檢測規則,黑名單白名單進行過濾))->數據會先到WAF(也就是此處的python腳本)->先檢測一遍->如果數據正常->再傳輸到中間件平臺(如apache)->再到服務器進行代碼數據處理
輸入xss攻擊特征payload->被python檢測到了
b、通過AI算法學習,生成檢測
先通過樣本,通過算法,提取特征,生成檢測的pkl文件
開啟python腳本檢測本地5000端口->模擬WAF產品
輸入xss攻擊特征payload->被python檢測到了
AI算法檢測(于規則檢測寫法的區別)->在于通過樣本自動學習->生成skl(用于檢測攻擊特征的文件)->進行規則檢測過濾
這樣的AI模型算法怎樣寫?->chatgpt
三、代碼-內置函數
檢測:數據的類型差異,數據的固定內容->針對類型和固定數據內容進行過濾->缺點在于過濾單一、有限->麻煩
gettype()獲取變量的類型
is_float()檢測變量是否是浮點型
is_bool()檢測變量是否是布爾型
is_int()檢測變量是否是整數
is_null()檢測變量是否為NULL
is_numeric()檢測變量是否為數字或數字字符串
is_object()檢測變量是否是一個對象
is_resource()檢測變量是否為資源類型
is_scalar()檢測變量是否是一個標量
is_string()檢測變量是否是字符串
is_array()檢測變量是否是數組
filter_var()使用特定的過濾器過濾一個變量
FILTER_SANITIZE_STRING 過濾器可以過濾HTML標簽和特殊字符
FILTER_SANITIZE_NUMBER_INT 過濾器可過濾非整數字符
FILTER_SANITIZE_URL 過濾器用于過濾URL中的非法字符
FILTER_VALIDATE_EMAIL 過濾器來驗證電子郵件地址的有效性
四、SQL注入過濾:
1、Addslashes()返回字符串,該字符串為了數據庫查詢語句等的需要在某些字符前加上了反斜線(進行轉義)。這些字符是單引號()、雙引號(”)、反斜線()與NULL字符)。
2、stripslashes()反引用一個引用字符串,如果magic_quotes_sybase項開啟,反斜線將被去除,但是兩個反斜線將會被替換成一個。
3、addcslashes()返回字符串,該字符串在屬于參數charlist列表中的字符前都加上了反斜線。
4、stripcslashes()返回反轉義后的字符串。可識別類似C語言的\n,r,…八進制以及十六進制的描述。
5、mysql_escape_string()此函數并不轉義%和_。作用和mysql real escape_string()基本一樣
6、mysql_real_escape_string()調用mysql庫的函數在以下字符前添加反斜杠:x00、\n、\r、\、x1a
7、PHP魔術引號當打開時,所有的'(單引號),”(雙引號),(反斜線)和NULL字符都會被自動加上一個反斜線進行轉義。這和addslashes()作用完全相同。
8、預編譯機制:提前固定一個模型(執行架構)不管sql注入傳入的參數怎么構造,都是以固定的模型輸出
演示:魔術引號<=>addslashes(),預編譯等
補充:由于以上過濾sql注入方式單一,簡單粗暴,我們可以采用配置sql注入過濾文件,集中多種過濾方式,提高效率,方便簡潔
①寫入過濾sql注入配置文件
②調用配置文件
③實操
五、XSS跨站過濾:
filter_var()使用特定的過濾器過濾一個變量
FILTER_SANITIZE_STRING 過濾器可以過濾HTML標簽和特殊字符
1、htmlspecialchars()函數把預定義的字符轉換為HTML實體
2、strip_tags()函數剝去字符串中的HTML、XML以及PHP的標簽。
補充:由于以上過濾xss方式單一,簡單粗暴,我們可以采用配置xss過濾文件,集中多種過濾方式,提高效率,方便簡潔
①寫入過濾xss配置文件
②調用配置文件
③實操
六、命令執行過濾
escapeshellcmd()確保用戶只執行一個命令用戶可以指定不限數量的參數用戶不能執行不同的命令
escapeshellarg()確保用戶只傳遞一個參數給命令用戶不能指定更多的參數一個用戶不能執行不同的命令