線上服務咨詢
Article/文章
記錄成長點滴 分享您我感悟
PHP開發不能違反的安全規則
發表時間:2019-07-30 16:45:47
文章來源:沈陽軟件開發
標簽:網站建設 小程序開發 小程序制作 微信小程序開發 公眾號開發 微信公眾號開發 網頁設計 網站優化 網站排名 網站設計 微信小程序設計 小程序定制 微信小程序定制
瀏覽次數:0
您必須了解的有關Web應用程序安全性的第一件事是您不應該信任外部數據。外部數據包括程序員不直接在PHP代碼中輸入的任何數據。來自任何其他來源(例如GET變量,表單POST,數據庫,配置文件,會話變量或cookie)的任何數據都是不可信的,直到采取措施確保安全性為止。
例如,以下數據元素可以被認為是安全的,因為它們是在PHP中設置的。
清單1.安全可靠的代碼$ myUsername='tmyer'; $ arrayarrayUsers=陣列( 'tmyer', '湯姆', '撬');定義( “問候語”, 'hellothere' $名為myUsername。);>但是,以下數據元素存在缺陷。
清單2.不安全,有缺陷的代碼$ myUsername=$ _ POST ['username']; //受污染! $ arrayarrayUsers=陣列($名為myUsername, '湯姆', '撬'); //污點! define(“GREETING”,'hellothere'。$ myUsername); //污染了!>為什么第一個變量$ myUsername有缺陷?因為它直接來自POST表單。用戶可以在此輸入字段中輸入任何字符串,包括清除文件或運行以前上載的文件的惡意命令。你可能會問,“難道你不能使用客戶端(Javascrīpt)表單驗證腳本只接受字母AZ以避免這種危險嗎?”是的,這總是一個很好的步驟,但正如你將在后面看到的那樣。任何人都可以將任何表單下載到他們自己的機器上,進行修改,然后重新提交他們需要的任何內容。
解決方案很簡單:您必須在$ _POST ['username']上運行清理代碼。如果你不這樣做,那么在任何其他時候使用$ myUsername(例如在數組或常量中),你可以污染這些對象。清理用戶輸入的簡單方法是使用正則表達式來處理它。在此示例中,您只想接受字母。將字符串限制為特定數量的字符或者要求所有字母都是小寫也是一個好主意。
清單3.使用戶輸入安全$ myUsername=cleanInput($ _ POST ['username']); //干凈! $ arrayarrayUsers=陣列($名為myUsername, '湯姆', '撬'); //干凈! define(“GREETING”,'hellothere'。$ myUsername); //干凈! functioncleanInput($輸入){$=清潔用strtolower($輸入); $ clean=preg_replace(“/[^ az] /”,“”,$ clean $ clean=substr($ clean,0,12); return $ clean;}?>規則 2:禁用那些使安全性難以實施的PHP設置
我已經知道我不能信任用戶輸入,我應該知道我不應該相信我在我的機器上配置PHP的方式。例如,請務必禁用register_globals。如果啟用了register_globals,您可能會做一些粗心的事情,例如用$ variable替換同名的GET或POST字符串。通過禁用此設置,PHP會強制您在正確的命名空間中引用正確的變量。要使用POST形式的變量,您應該引用$ _POST ['variable']。這不會將此特定變量誤解為cookie,會話或GET變量。
規則 3:如果不能理解它,就不能保護它
一些開發人員使用奇怪的語法,或者非常嚴格地組織語句以形成簡短但模糊的代碼。這種方法效率很高,但如果您不了解代碼的作用,則無法決定如何保護它。例如,您喜歡以下兩段代碼中的哪一段?
清單4.使代碼易于保護//obfuscatedcode $ input=(isset($ _ POST ['username'])?$ _ POST ['username']:“); //unobfuscatedcode $ input=''; if(isset($ _POST ['username'])){$ input=$ _ POST ['username']; } else {$ input=''; }在第二個更清晰的代碼片段中,很容易看到$ input存在缺陷,需要在安全處理之前進行清理。
規則 4:“縱深防御” 是新的法寶
本教程將使用示例說明如何在處理表單的PHP代碼中執行必要步驟時保護聯機表單。同樣,即使您使用PHP正則表達式來確保GET變量是完全數字的,您仍然可以采取措施來確保SQL查詢使用轉義用戶輸入。深度防御不僅僅是一個好主意,它確保你不會陷入嚴重的麻煩。現在已經討論了基本規則,讓我們來看看第一個威脅:SQL注入攻擊。
網站建設,小程序開發,小程序制作,微信小程序開發,公眾號開發,微信公眾號開發,網頁設計,網站優化,網站排名,網站設計,微信小程序設計,小程序定制,微信小程序定制