成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【譯】PHP中的防御性編程

Coding01 / 591人閱讀

摘要:條件語句這是最容易進(jìn)行防御性編程的地方之一,也是最容易滿足的地方。語法和命名的一致性一致性是一個灰色地帶它更多的是關(guān)于編碼標(biāo)準(zhǔn)之類的,但它和防御性編程也有聯(lián)系。假設(shè)是具有防御性編程習(xí)慣的程序員最大的敵人。

菲納格動態(tài)逆定律:

會出錯的,終將會出錯 —-  在最糟糕的時刻。

防御性編程是什么意思

防御性編程,簡單的說,就是在編程的時候有目的地預(yù)測可能的故障點(diǎn)。目的是在那些可能發(fā)生的問題發(fā)生前解決它們。你看見了問題,對吧?預(yù)測意料之外的事情本來就有內(nèi)在的難度,當(dāng)你想要預(yù)測意料之外的事情并且解決它就更是難上了好幾倍。

下面我們看幾個實(shí)際的例子。

條件語句

這是最容易進(jìn)行防御性編程的地方之一,也是最容易滿足的地方。在用PHP編程的許多情況下你不會需要“else”。

假設(shè),你在寫一個函數(shù)并且需要一個條件語句。在這里,你只需要為你特定的變量使用三個條件語句如下:

if($var == a){ }
else if($var == b){ }
else if($var == c){ }

沒有其他可能性了,你說,并且繼續(xù)碼代碼。但是,讓我們在這里停一下。我知道你知道這里沒有其他可能性了。并且我相信你。但有時候(不可預(yù)測的)情況會發(fā)生。我們忘掉了一些情況。我們檢查錯誤。我們最終重用了一些代碼,超出了原本的預(yù)定范圍。突然我們有了泄露錯誤或者有時候是靜默的錯誤狀態(tài),因?yàn)槲覀儧]有使用catch。使用else代碼塊。在使用switch時要使用default。用它們來返回或者記錄錯誤,這樣你才知道發(fā)生了什么(如果發(fā)生了的話)。雖然會多用兩行代碼,但當(dāng)一些你無法預(yù)測的事情發(fā)生時,這是值得的。

絕不相信用戶輸入

你以前有沒有聽說過這個說法?大多數(shù)程序員聽過。這有一點(diǎn)含糊,通俗點(diǎn)講,理所當(dāng)然。但它是真理。你絕不應(yīng)該相信用戶輸入。這不是說你假設(shè)所有用戶是瘋狂的黑客,他們使用一些精心設(shè)計的命令來摧毀你的應(yīng)用。沒有必要妄想。但是,你應(yīng)該假設(shè)用戶不知道你的代碼,他們不知道你需要填寫什么參數(shù),或者參數(shù)應(yīng)該多長。他們不知道什么文件類型或者什么大小能上傳(即使應(yīng)用告訴了他們)。偶爾他們會是機(jī)器或者黑客并且他們希望在他們的輸入中運(yùn)行腳本,有時候甚至是在登陸后的輸入中。你怎么知道你能相信認(rèn)證或者驗(yàn)證碼能在用戶輸入之前提供一個安全的堡壘?

答案:絕不。

你絕不相信用戶輸入。如果你信任的用戶輸入,那么你永遠(yuǎn)不會有一個突破。明白了嗎?所以總是要評估你的輸入,一定要保證你在處理數(shù)據(jù)尤其是要存入數(shù)據(jù)庫或者要把它展示出來時使用了合適的技術(shù)。因此 – 絕不相信輸入,即使來自不是用戶的輸入的地方 – 輸入驗(yàn)證永遠(yuǎn)是你的朋友。看看Survive the Deep End: PHP Security 并且使用 validation library.吧。

對你的代碼的假設(shè)

不要假設(shè)任何事情。如果前兩個主題教會我們一些事情的話,那就是我們不應(yīng)該做任何假設(shè)。作為程序員,尤其是致力于一個項目太久后,我們開始做很多假設(shè)。我們假設(shè)用戶知道一些我們知道的事情。不一定是技術(shù)細(xì)節(jié),也可以是程序的功能性細(xì)節(jié)。我們假設(shè)用戶知道文件能有多大因?yàn)?。。。我們已?jīng)知道。或者他們知道為了讓郵件腳本。。。但事實(shí)不是,他們不知道以上任何東西。這好像更多的是前端的工作,但明顯的是你在后端仍然要處理用戶行為和用戶輸入,所以值得好好想想。

另一個許多程序員都會做的驚人的假設(shè)是我們在任何時候?qū)τ谖覀兊暮瘮?shù),類或者其它代碼段的明顯的功能屬性。一個具有防御性的程序員會仔細(xì)考慮的不僅僅是用一般的文檔來描述函數(shù)是干什么的——他們也將寫下他們對輸入,參數(shù),用例,或任何其他類似的東西做出的任何假設(shè)。因?yàn)槲覀兌际侨耍覀冞^一段時間會忘掉一些事。我們最后也很可能會面臨其他人維護(hù),擴(kuò)展或者替換我們的代碼。如果沒有別的,回想一下,編程是發(fā)生在一個充滿技術(shù)變革的世界里。如果你的應(yīng)用仍然能使用幾年,可能會升級PHP版本并且失去一些功能,或者一些你自己代碼里面具有交互的組件之間需要改變。預(yù)測這些是很困難的,所以好的注釋和文檔是非常重要的。

視野狹窄

另一件可以使我們忘記好的評論實(shí)踐以及標(biāo)準(zhǔn)的東西是視野狹窄。許多程序員都具有視野狹窄的毛病。你知道這種感覺 - 你解決問題,你處于最佳狀態(tài)。你覺得與你的音樂(或沒有)獨(dú)立于自己的小世界中,并且你就在編碼,突然兩小時過了,你意識到你已經(jīng)寫了無數(shù)行沒有注釋的代碼。我們所有人偶爾都會遇到這種事情,但重要的是在某處發(fā)現(xiàn)這個情況并且補(bǔ)上應(yīng)有的注釋。

語法和命名的一致性

一致性是一個灰色地帶 – 它更多的是關(guān)于編碼標(biāo)準(zhǔn)之類的,但它和防御性編程也有聯(lián)系。在PHP中,有標(biāo)準(zhǔn)規(guī)范你的代碼格式以便別人查看,或者你以后使用。但常常沒人讓你的代碼標(biāo)準(zhǔn)化。但是無論你是否按照標(biāo)準(zhǔn)編碼,你至少要保持一致性 – 這能讓你少犯錯誤。這對于需要大量時間返回并且修復(fù)的小的語法錯誤尤其適用。如果你總是使用相同的間隔,格式和語法,命名規(guī)格等等你就能更好的避免犯錯以至于誤讀你自己的代碼。你更可能快速瀏覽代碼并且找到你需要的東西。

總結(jié)

總的來說,除去用戶行為和動作,不要對你的程序做任何假設(shè)。假設(shè)是具有防御性編程習(xí)慣的程序員最大的敵人。不要假設(shè)你不需要 default 語句或者 else 代碼塊。盡量使用正確的用戶錯誤信息,警告,日志或者任何其它你假設(shè)不會用到的代碼。你的假設(shè)通常是正確的 – 但我們不在乎。我們在乎的是它們出錯的時候。一定要計劃得好,準(zhǔn)備著你可能需要在幾小時,幾周,幾個月甚至幾年后回顧你的代碼,或者其他人需要 – 相應(yīng)的就要好好寫文檔。別假設(shè)它永遠(yuǎn)不需要升級,擴(kuò)展或者維護(hù)。那是無知的,在更多的情況下是疏忽。有時候保持一顆防御性編程的心能幫你更有效更安全地估計,計劃和編程。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21388.html

相關(guān)文章

  • PHP中的御性編程

    摘要:條件語句這是最容易進(jìn)行防御性編程的地方之一,也是最容易滿足的地方。語法和命名的一致性一致性是一個灰色地帶它更多的是關(guān)于編碼標(biāo)準(zhǔn)之類的,但它和防御性編程也有聯(lián)系。假設(shè)是具有防御性編程習(xí)慣的程序員最大的敵人。 菲納格動態(tài)逆定律: 會出錯的,終將會出錯 —- 在最糟糕的時刻。 showImg(https://segmentfault.com/img/bVtdvT); 防御性編程是什么意思 ...

    mzlogin 評論0 收藏0
  • PHPer書單

    摘要:想提升自己,還得多看書多看書多看書下面是我收集到的一些程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧當(dāng)然,如果你有好的書想分享給大家的或者覺得書單不合理,可以去通過進(jìn)行提交。講師溫銘,軟件基金會主席,最佳實(shí)踐作者。 想提升自己,還得多看書!多看書!多看書!下面是我收集到的一些PHP程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧!當(dāng)然,如果你有好的書想分享給大家的或者...

    jimhs 評論0 收藏0
  • PHP網(wǎng)站常見一些安全漏洞及防御方法

    摘要:一常見網(wǎng)站安全漏洞對于的漏洞,目前常見的漏洞有五種。分別是文件漏洞注入漏洞腳本命令執(zhí)行漏洞全局變量漏洞和文件漏洞。這就是月行胃的注入漏洞。 一、常見PHP網(wǎng)站安全漏洞 對于PHP的漏洞,目前常見的漏洞有五種。分別是Session文件漏洞、SQL注入漏洞、腳本命令執(zhí)行漏洞、全局變量漏洞和文件漏洞。這里分別對這些漏洞進(jìn)行簡要的介紹。 1、session文件漏洞 Session攻擊是黑客最常...

    lavor 評論0 收藏0
  • 雜貨 - 收藏集 - 掘金

    摘要:消息隊列技術(shù)介紹后端掘金一消息隊列概述消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合異步消息流量削鋒等問題。的內(nèi)存優(yōu)化后端掘金聲明本文內(nèi)容來自開發(fā)與運(yùn)維一書第八章,如轉(zhuǎn)載請聲明。 消息隊列技術(shù)介紹 - 后端 - 掘金一、 消息隊列概述 消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合、異步消息、流量削鋒等問題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu)。是大型分布式系...

    loostudy 評論0 收藏0
  • PHP:40+開發(fā)工具推薦

    摘要:今天,就為開發(fā)者介紹個方便的工具。對開發(fā)者來說,是一個非常有用的工具,它提供了超過個有用的函數(shù)。該工具檢查輸入源代碼和報告任何違反給定的標(biāo)準(zhǔn)??蚣苁且粋€開發(fā)的工具。它側(cè)重于安全性和性能,絕對是最安全的開發(fā)框架之一。 PHP是為Web開發(fā)設(shè)計的服務(wù)器腳本語言,但也是一種通用的編程語言。超過2.4億個索引域使用PHP,包括很多重要的網(wǎng)站,例如Facebook、Digg和WordPress。...

    dreambei 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<