PHP安全程式設計

2021-08-15 11:37:36 字數 1442 閱讀 7501

一 . 外部策略

1.處理使用者的提交的資料

$_get , $_post , $_request , $_cookie , $argv , php://stdin , php://input , file_get_contents

遠端的資料庫資訊 , 遠端api , 來自客戶端的資料

以上的資料來源都很可能被作為資料來源插入到你的php指令碼中從而造成:xss和csrf攻擊以及sql注入

解決方法:

過濾輸入:使用htmlentities函式對資料進行過濾;

使用pdo預處理語句過濾資料,

驗證資料:使用filter_var,filter_input

函式去驗證不同型別的資料

轉義輸出:使用htmlentities函式對資料進行轉義再輸出到頁面上

2.處理使用者的密碼

絕不可以把使用者的密碼明文儲存到資料庫,否則一旦資料庫被黑後果就不堪設想

加密與雜湊:加密是雙向演算法,雜湊是單向演算法,雜湊後的資料不能還原成原始值,最安全的雜湊演算法是bcrypt,

bcrypt演算法會自動加鹽,可以防止彩虹表攻擊,在php程式設計中可以使用password_hash和password_verifty函式

1.檔案系統安全

php如果具有root許可權,且在指令碼中允許使用者刪除檔案,那麼使用者提交資料,不進行過濾,就非常有可能刪除系統檔案

// 從使用者目錄中刪除指定的檔案

$username = $_post['user_submitted_name'];

$userfile = $_post['user_submitted_filename'];

$homedir = "/home/$username";

unlink ("$homedir/$userfile");

echo "the file has been deleted!";

?>

上面的**,假設使用者提交的$userfile值是 ../etc/,那麼/etc目錄就會被刪除

防範檔案系統攻擊,策略如下

只給php有限的許可權

使用者提交上來的變數要監測和過濾,不能包含檔案路徑等特殊字元

盡量避免使用php操作檔案(刪除),如果有這方面的需求,那使用者可刪除檔案也必須是系統生成的隨機名稱,不可被使用者控制

線上環境關閉錯誤報告(error_reporting,dislay_erros,可在php.ini中配置error_log路徑,記錄錯誤資訊,這樣有助於發現可能的使用者攻擊)

register globals,棄用(移除)的特性,不要使用

魔術引號特性,不要開啟,在php-5.4中已經被移除

盡量使用php的最新版本,最新版本修復了已知的很多安全漏洞和bug

**中嚴格遵守上述策略,基本能保證**不會有太多的安全漏洞,能防範常見攻擊。

PHP安全程式設計之PHP的安全模式

php的safe mode選項的目的是為了解決本小節前後所述的某些問題。但是,在php層面上去解決這類問題從架構上來看是不正確的,正如php手冊所述 當安全模式生效時,php會對正在執行的指令碼所讀取 或所操作 檔案的屬主進行檢查,以保證與該指令碼的屬主是相同的。雖然這樣確實可以防範本章中的很多例子...

安全編碼最佳實踐 PHP及程式語言安全

企業應該避免使用php開發應用嗎?一些人認為,比起其它選擇,php太不安全了。whitehat security 白帽安全 公司最近發布了研究,他們使用自動化的工具檢視1700個web站點,看看安全bug的數量和建立站點使用的程式語言之間是否有任何關聯。總體的結論是,沒有一種語言是 最安全的 研究表...

php學習筆記(二十八)php安全程式設計

資料的安全問題和使用者的隱私洩漏等問題越來越困擾網際網路這個虛擬的世界。在寫程式時除了能讓他執行起來,還要考慮他的安全性。一驗證使用者輸入。你永遠不知道使用者怎麼使用你的產品,使用者會用奇怪的方式跟你的應用程式進行互動。可能是誠實的輸入錯誤,也可能是惡意企圖。使用者可能會進行的輸入 空白輸入,控制字...