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