下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——PHP中的防御性編程PHP中的防衛(wèi)性編程
評(píng)價(jià)一個(gè)編程的好壞,就是看該程序是否把用戶可能發(fā)生的故障點(diǎn)想到的多全面。下面是我用心為大家整理的PHP中的防衛(wèi)性編程,夢(mèng)想對(duì)大家有扶助,更多內(nèi)容請(qǐng)關(guān)注應(yīng)屆畢業(yè)生網(wǎng)!
菲納格動(dòng)態(tài)逆定律:
會(huì)出錯(cuò)的,終將會(huì)出錯(cuò)-在最糟糕的時(shí)刻。
防衛(wèi)性編程是什么意思
防衛(wèi)性編程,簡樸的說,就是在編程的時(shí)候有目的地預(yù)料可能的故障點(diǎn)。目的是在那些可能發(fā)生的問題發(fā)生前解決它們。你望見了問題,對(duì)吧?預(yù)料意料之外的事情本來就有內(nèi)在的難度,當(dāng)你想要預(yù)料意料之外的事情并且解決它就更是難上了好幾倍。
下面我們看幾個(gè)實(shí)際的例子。
條件語句
這是最輕易舉行防衛(wèi)性編程的地方之一,也是最輕易得志的地方。在用PHP編程的大量處境下你不會(huì)需要"else'。
假設(shè),你在寫一個(gè)函數(shù)并且需要一個(gè)條件語句。在這里,你只需要為你特定的變量使用三個(gè)條件語句如下:
if$var==a
elseif$var==b
elseif$var==c
沒有其他可能性了,你說,并且持續(xù)碼代碼。但是,讓我們?cè)谶@里停一下。我知道你知道這里沒有其他可能性了。并且我相信你。但有時(shí)候不成預(yù)料的處境會(huì)發(fā)生。我們忘掉了一些處境。我們檢查錯(cuò)誤。我們最終重用了一些代碼,超出了原本的預(yù)定范圍。突然我們有了泄露錯(cuò)誤或者有時(shí)候是靜默的錯(cuò)誤狀態(tài),由于我們沒有使用catch。使用else代碼塊。在使用switch時(shí)要使用default。用它們來返回或者記錄錯(cuò)誤,這樣你才知道發(fā)生了什么假設(shè)發(fā)生了的話。雖然會(huì)多用兩行代碼,但當(dāng)一些你無法預(yù)料的事情發(fā)生時(shí),這是值得的。
絕不相信用戶輸入
你以前有沒有聽說過這個(gè)說法?大多數(shù)程序員聽過。這有一點(diǎn)含混,通俗點(diǎn)講,理所當(dāng)然。但它是真理。你絕不理應(yīng)相信用戶輸入。這不是說你假設(shè)全體用戶是瘋狂的黑客,他們使用一些用心設(shè)計(jì)的命令來摧毀你的應(yīng)用。沒有必要妄想。但是,你理應(yīng)假設(shè)用戶不知道你的代碼,他們不知道你需要填寫什么參數(shù),或者參數(shù)理應(yīng)多長。他們不知道什么文件類型或者什么大小能上傳即使應(yīng)用報(bào)告了他們。無意他們會(huì)是機(jī)器或者黑客并且他們夢(mèng)想在他們的輸入中運(yùn)行腳本,有時(shí)候甚至是在登陸后的輸入中。你怎么知道你能相信認(rèn)證或者驗(yàn)證碼能在用戶輸入之前供給一個(gè)安好的堡壘?
答案:絕不。
你絕不相信用戶輸入。假設(shè)你信任的用戶輸入,那么你永遠(yuǎn)不會(huì)有一個(gè)突破。明白了嗎?所以總是要評(píng)估你的輸入,確定要保證你在處理數(shù)據(jù)尤其是要存入數(shù)據(jù)庫或者要把它表示出來時(shí)使用了適合的技術(shù)。因此絕不相信輸入,即使來自不是用戶的輸入的地方輸入驗(yàn)證永遠(yuǎn)是你的摯友。看看SurvivetheDeepEnd:PHPSecurity并且使用validationlibrary.吧。
對(duì)你的代碼的假設(shè)
不要假設(shè)任何事情。假設(shè)前兩個(gè)主題教會(huì)我們一些事情的話,那就是我們不理應(yīng)做任何假設(shè)。作為程序員,尤其是致力于一個(gè)工程太久后,我們開頭做好多假設(shè)。我們假設(shè)用戶知道一些我們知道的事情。不確定是技術(shù)細(xì)節(jié),也可以是程序的功能性細(xì)節(jié)。我們假設(shè)用戶知道文件能有多大由于。。。我們已經(jīng)知道?;蛘咚麄冎罏榱俗屶]件腳本。。。但事實(shí)不是,他們不知道以上任何東西。這猶如更多的是前端的工作,但明顯的是你在后端依舊要處理用戶行為和用戶輸入,所以值得好好想想。
另一個(gè)大量程序員都會(huì)做的驚人的假設(shè)是我們?cè)谌魏螘r(shí)候?qū)τ谖覀兊暮瘮?shù),類或者其它代碼段的明顯的功能屬性。一個(gè)具有防衛(wèi)性的程序員會(huì)留心考慮的不僅僅是用一般的文檔來描述函數(shù)是干什么的他們也將寫下他們對(duì)輸入,參數(shù),用例,或任何其他類似的`東西做出的任何假設(shè)。由于我們都是人,我們過一段時(shí)間會(huì)忘掉一些事。我們結(jié)果也很可能會(huì)面臨其他人維護(hù),擴(kuò)展或者替換我們的代碼。假設(shè)沒有別的,回想一下,編程是發(fā)生在一個(gè)彌漫技術(shù)變革的世界里。假設(shè)你的應(yīng)用依舊能使用幾年,可能會(huì)升級(jí)PHP版本并且失去一些功能,或者一些你自己代碼里面具有交互的組件之間需要變更。預(yù)料這些是很困難的,所以好的解釋和文檔是分外重要的。
視野狹窄
另一件可以使我們忘卻好的評(píng)論實(shí)踐以及標(biāo)準(zhǔn)的東西是視野狹窄。大量程序員都具有視野狹窄的毛病。你知道這種感覺-你解決問題,你處于最正確狀態(tài)。你覺得與你的音樂或沒有獨(dú)立于自己的小世界中,并且你就在編碼,突然兩小時(shí)過了,你意識(shí)到你已經(jīng)寫了多數(shù)行沒有解釋的代碼。我們?nèi)w人無意都會(huì)遇到這種事情,但重要的是在某處察覺這個(gè)處境并且補(bǔ)上應(yīng)有的解釋。
語法和命名的一致性
一致性是一個(gè)灰色地帶它更多的是關(guān)于編碼標(biāo)準(zhǔn)之類的,但它和防衛(wèi)性編程也有聯(lián)系。在PHP中,有標(biāo)準(zhǔn)模范你的代碼格式以便別人查看,或者你以后使用。但往往沒人讓你的代碼標(biāo)準(zhǔn)化。但是無論你是否按照標(biāo)準(zhǔn)編碼,你至少要保持一致性這能讓你少犯錯(cuò)誤。這對(duì)于需要大量時(shí)間返回并且修復(fù)的小的語法錯(cuò)誤尤其適用。假設(shè)你總是使用一致的間隔,格式和語法,命名規(guī)格等等你就能更好的制止犯錯(cuò)以至于誤讀你自己的代碼。你更可能快速欣賞代碼并且找到你需要的東西。
總結(jié)
總的來說,除去用戶行為和動(dòng)作,不要對(duì)你的程序做任何假設(shè)。假設(shè)是具有防衛(wèi)性編程習(xí)慣的程序員最大的敵人。不要假設(shè)你不需要default語句或者else代碼塊。盡量使用正確的用戶錯(cuò)誤信息,警告,日志或者任何其它你假設(shè)不會(huì)用到的代碼。你的假設(shè)通常是正確的但我們不在乎。我們?cè)诤醯氖撬鼈兂鲥e(cuò)的時(shí)候。確定要籌劃得
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年本溪市教育系統(tǒng)冬季“名校優(yōu)生”引進(jìn)急需 緊缺人才(本溪市第一中學(xué))備考筆試試題及答案解析
- 2025重慶江津區(qū)第二人民醫(yī)院招聘5名備考筆試試題及答案解析
- 2025云南磨憨開發(fā)投資集團(tuán)有限公司招聘2人備考筆試題庫及答案解析
- 2025北京大學(xué)第三醫(yī)院秦皇島醫(yī)院第二批招聘13人(河北)參考筆試題庫附答案解析
- 2025年廣西北海銀灘開發(fā)投資股份有限公司公開招聘2人備考考試題庫及答案解析
- 2025年西安旅游股份有限公司招聘考試備考題庫及答案解析
- 英語教學(xué)設(shè)計(jì)與課堂活動(dòng)方案示例
- 醫(yī)院副院長崗位職責(zé)與績效方案
- 淤泥圍堰施工方案(3篇)
- 真人密室逃脫活動(dòng)策劃方案
- 2025至2030中國聚四氟乙烯(PTFE)行業(yè)經(jīng)營狀況及投融資動(dòng)態(tài)研究報(bào)告
- 教育、科技、人才一體化發(fā)展
- 營銷與客戶關(guān)系管理-深度研究
- 耐壓試驗(yàn)操作人員崗位職責(zé)
- 2020-2021學(xué)年廣東省廣州市黃埔區(qū)二年級(jí)(上)期末數(shù)學(xué)試卷
- 財(cái)政部政府采購法律法規(guī)與政策學(xué)習(xí)知識(shí)考試題庫(附答案)
- 長鑫存儲(chǔ)在線測(cè)評(píng)題
- DL∕T 5344-2018 電力光纖通信工程驗(yàn)收規(guī)范
- T-CCIIA 0004-2024 精細(xì)化工產(chǎn)品分類
- 世界當(dāng)代史教材
- 高壓電動(dòng)機(jī)保護(hù)原理及配置
評(píng)論
0/150
提交評(píng)論