每個PHP開發(fā)者都應(yīng)該看的書
PHP這幾年口碑很差。關(guān)于它的“糟糕設(shè)計的匯總”和語法上的矛盾有著大量的討論,但是主要的抱怨通常是安全。很多PHP站點分分鐘被黑掉,甚至一些有經(jīng)驗的、有見識的程序員會說,這門語言本身是不安全的。
我總是對此持反對意見,因為有常識性的原因,有如此多的PHP安全違反現(xiàn)象。
PHP應(yīng)用程序經(jīng)常被黑掉是由于:
PHP應(yīng)用程序太多了。它易于學(xué)習(xí)和編寫。糟糕的PHP也容易編寫。就是這么簡單。PHP流行好多年了。PHP越是受歡迎,它被發(fā)現(xiàn)的漏洞就越多。這些黑客發(fā)現(xiàn)的漏洞很少是PHP處理引擎本身的,通常是腳本本身的弱點。
這意味著,當(dāng)一個PHP應(yīng)用程序被黑掉的時候,大多數(shù)是程序員的錯誤。對不起,但這是事實。
你可以和其它web語言一樣編寫安全的PHP。是時候開始真正探索安全問題了。
編寫安全的PHP代碼不是一個對PHP開發(fā)者隱藏的、秘密的黑色藝術(shù)。但是信心太零散了,你需要花費數(shù)周或數(shù)月(或不再這么長時間)去收集某些散篇目錄或法則的、好的安全實踐。甚至只有真的經(jīng)驗才會告訴你它有多重要。
幸虧Ben Edmunds已經(jīng)為你做好了。它最近出版了《Building Secure PHP Apps – a Practical Guide》,它是我讀過的最好的安全相關(guān)的書籍之一,當(dāng)然也是最好地涵蓋了PHP。本文我將詳述為什么我認為每個PHP開發(fā)者應(yīng)當(dāng)閱讀。
本書是個簡明指導(dǎo),把你帶到做為一名開發(fā)者的下一個等級,讓你打造更好、更安全的腳本。
簡介本書很快就進入了web開發(fā)的常識規(guī)則:不要相信你的用戶,過濾所有輸入。從一個小情景開始,跳到了用戶能夠進入系統(tǒng)的技術(shù)方法。第一章的主題有:
SQL注入大量賦值字段類型轉(zhuǎn)換過濾輸入/輸出這些都是PHP新手(和一些老手)一直容易忽視的地方。過濾輸入被很多人看作是可選的一步,這一章做了大量討論。
在閱讀過程中,讓我想起了多年前我的第一天工作,當(dāng)時我深挖現(xiàn)存代碼,找到了新用戶創(chuàng)建腳本的代碼:
if ($_POST['isadmin'] == 1) {// code to set to admin in database }
當(dāng)看到這段代碼時,我感到非常恐慌,因為它是一個非常有效的腳本,很容易被一個惡意用戶搞定,猜出來并插入一個簡單的表單變量,進而訪問大約5,000個信用卡卡號和其他的個人信息。
深挖后我發(fā)現(xiàn)如下代碼:
$sql = 'INSERT INTO database (id,name,...) VALUES (' . $_POST['Name'] . ');'
我在第一天差不多就走出了那份工作,因為他們正依靠這些可怕的代碼。這些代碼就在那兒,由你負責(zé)改變,一定要避免產(chǎn)生更多。
本章討論了像這樣的代碼為什么是巨大的風(fēng)險,以及如何修復(fù)。
HTTPS和證書這是另一個領(lǐng)域,Ben包含了腳本、故事和一點點幽默,同時也清晰地解釋了不太清晰的HTTPS的概念。他解釋的方式,甚至你的老板都能理解。
本書非常全面地描述了證書的工作原理、證書類型以及實現(xiàn)方法,甚至包括如何在Apache或Nginx上部署。
密碼本書對于密碼、哈希、表查詢(lookup tables)和salts做了仔細的解釋,這對開發(fā)人員創(chuàng)建用戶登錄系統(tǒng)有著令人難以置信的幫助。
這是一個甚至在2014年都極度缺乏的領(lǐng)域。我仍然能碰到過存儲純文本的密碼或像ROT13加密【注1】來保護他們的愚蠢方法的應(yīng)用程序。為了讓人們使用你的應(yīng)用程序,以及你的好名聲,請不要這樣做。
密碼和其它敏感數(shù)據(jù)應(yīng)該非常難以獲取,甚至有人拿到數(shù)據(jù)庫的所有權(quán)限。這本書很全面地包括了,會給你設(shè)計更好系統(tǒng)的不錯指導(dǎo)。
身份驗證和訪問控制本書包含的主題非常全面。當(dāng)你構(gòu)建新的PHP應(yīng)用程序時,某些首要考慮是:
誰能夠訪問哪些資源?誰能夠控制其他用戶訪問?這是考慮應(yīng)用程序、特別是處理敏感數(shù)據(jù)的應(yīng)用程序的重要地方。企業(yè)里的相當(dāng)一部分開發(fā)就是致力于此。如果你不正確地建立了身份驗證和訪問控制,最可能發(fā)生的就是你讓用戶感到困擾,并產(chǎn)生了更多的工作。比這更糟糕的是服務(wù)器數(shù)據(jù)缺口 以及/或者 數(shù)據(jù)毀壞。
本書很好地覆蓋了基礎(chǔ)知識,然后它深入到像控制訪問文件或應(yīng)用程序單個頁面之類的工作,還有很多供參考的代碼示例。
特定利用本書涵蓋了一些普通的利用來破壞系統(tǒng),非常詳細地探索了跨站點腳本,它可以說是攻擊者利用應(yīng)用程序的最普通的方法。它解釋了不同種類的攻擊,以及如何保護自己。
不錯吧?你能夠通過這個鏈接打折購書!
我最喜歡這本書的地方在閱讀本書過程中,我真正享受的是,信息是如何以對于初學(xué)者和有經(jīng)驗的程序員都有用的方式呈現(xiàn)的。有一系列概念被提出,它們是什么以及如何自我保護。有大量的代碼示例,而不像一些技術(shù)書籍所具備的“填充碼”。
你可以很快通讀本書,因為沒有太多內(nèi)容。新手可以通讀本書,檢查每個主題,開始看看他們的代碼,并作出修正。記住在這個事情上,你需要持續(xù)修改。如果你回頭看看,一定會為六個月前寫的代碼感到羞愧,你在做正確的事情。
更高級的、有經(jīng)驗的程序員可以使用這個指南填補他們的弱點(不管你在這個行當(dāng)多長時間了,你有弱點的,承認吧),更好地了解他們在工作中使用的系統(tǒng)。例如,這么多年我瘋了似的使用身份驗證,但是從來沒有在本書提到的層面考慮過。
不管你是誰,你會學(xué)到東西的。因此不要看本文了,去買一份拷貝吧!使用這個鏈接購買是有折扣的!!
免責(zé)聲明我沒有在我的博客做過多評論,因此你可能有一些問題。為清楚起見,我沒有為評論收取付費或賠償。上面的優(yōu)惠碼給我博客的讀者在原書價格基礎(chǔ)上少4美元,我不會收到錢的。當(dāng)然為了評論的目的,我收到過本書的促銷拷貝。
我本人認識這個作者,那是我相信本書里的信息、完全信任其指導(dǎo)的原因之一。這幾年Ben Edmunds在PHP社區(qū)有巨大的影響力,他有著10年的PHP經(jīng)驗,他是PHP用戶組在波蘭區(qū)域的領(lǐng)導(dǎo)者之一,這幾年在PHP開源項目做出了巨大的貢獻。可以這么說,他知道他的東西,你能夠相信這里呈現(xiàn)的信息。
原文地址:http://www.jeremymorgan.com/blog/programming/the-book-every-php-dev-should-read/ 注1:ROT13(回轉(zhuǎn)13位,rotate by 13 places,有時中間加了個連字符稱作ROT-13)是一種簡易的替換式密碼。http://zh.wikipedia.org/wiki/ROT13相關(guān)文章:
1. asp(vbscript)中自定義函數(shù)的默認參數(shù)實現(xiàn)代碼2. Ajax實現(xiàn)表格中信息不刷新頁面進行更新數(shù)據(jù)3. jsp EL表達式詳解4. jsp中sitemesh修改tagRule技術(shù)分享5. JavaWeb Servlet中url-pattern的使用6. 爬取今日頭條Ajax請求7. 如何使用瀏覽器擴展篡改網(wǎng)頁中的JS 文件8. ASP基礎(chǔ)知識VBScript基本元素講解9. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)10. JSP servlet實現(xiàn)文件上傳下載和刪除
