每個PHP開發者都應該看的書
PHP這幾年口碑很差。關於它的“糟糕設計的彙總”和語法上的矛盾有著大量的討論,但是主要的抱怨通常是安全。很多PHP站點分分鐘被黑掉,甚至一些有經驗的、有見識的程式設計師會說,這門語言本身是不安全的。
我總是對此持反對意見,因為有常識性的原因,有如此多的PHP安全違反現象。
PHP應用程式經常被黑掉是由於:
- PHP應用程式太多了。
- 它易於學習和編寫。
- 糟糕的PHP也容易編寫。
就是這麼簡單。PHP流行好多年了。PHP越是受歡迎,它被發現的漏洞就越多。這些黑客發現的漏洞很少是PHP處理引擎本身的,通常是指令碼本身的弱點。
這意味著,當一個PHP應用程式被黑掉的時候,大多數是程式設計師的錯誤。對不起,但這是事實。
你可以和其它web語言一樣編寫安全的PHP。是時候開始真正探索安全問題了。
防止PHP hack的最佳防護
編寫安全的PHP程式碼不是一個對PHP開發者隱藏的、祕密的黑色藝術。但是信心太零散了,你需要花費數週或數月(或不再這麼長時間)去收集某些散篇目錄或法則的、好的安全實踐。甚至只有真的經驗才會告訴你它有多重要。
幸虧Ben Edmunds已經為你做好了。它最近出版了《Building Secure PHP Apps – a Practical Guide》,它是我讀過的最好的安全相關的書籍之一,當然也是最好地涵蓋了PHP。本文我將詳述為什麼我認為每個PHP開發者應當閱讀。
本書是個簡明指導,把你帶到做為一名開發者的下一個等級,讓你打造更好、更安全的指令碼。
簡介
本書很快就進入了web開發的常識規則:不要相信你的使用者,過濾所有輸入。從一個小情景開始,跳到了使用者能夠進入系統的技術方法。第一章的主題有:
- SQL隱碼攻擊
- 大量賦值欄位
- 型別轉換
- 過濾輸入/輸出
這些都是PHP新手(和一些老手)一直容易忽視的地方。過濾輸入被很多人看作是可選的一步,這一章做了大量討論。
在閱讀過程中,讓我想起了多年前我的第一天工作,當時我深挖現存程式碼,找到了新使用者建立指令碼的程式碼:
if ($_POST["isadmin"] == 1) { // code to set to admin in database }
當看到這段程式碼時,我感到非常恐慌,因為它是一個非常有效的指令碼,很容易被一個惡意使用者搞定,猜出來並插入一個簡單的表單變數,進而訪問大約5,000個信用卡卡號和其他的個人資訊。
深挖後我發現如下程式碼:
$sql = "INSERT INTO database (id,name,...) VALUES (" . $_POST["Name"] . ");"
我在第一天差不多就走出了那份工作,因為他們正依靠這些可怕的程式碼。這些程式碼就在那兒,由你負責改變,一定要避免產生更多。
本章討論了像這樣的程式碼為什麼是巨大的風險,以及如何修復。
HTTPS和證照
這是另一個領域,Ben包含了指令碼、故事和一點點幽默,同時也清晰地解釋了不太清晰的HTTPS的概念。他解釋的方式,甚至你的老闆都能理解。
本書非常全面地描述了證照的工作原理、證照型別以及實現方法,甚至包括如何在Apache或Nginx上部署。
密碼
本書對於密碼、雜湊、表查詢(lookup tables)和salts做了仔細的解釋,這對開發人員建立使用者登入系統有著令人難以置信的幫助。
這是一個甚至在2014年都極度缺乏的領域。我仍然能碰到過儲存純文字的密碼或像ROT13加密【注1】來保護他們的愚蠢方法的應用程式。為了讓人們使用你的應用程式,以及你的好名聲,請不要這樣做。
密碼和其它敏感資料應該非常難以獲取,甚至有人拿到資料庫的所有許可權。這本書很全面地包括了,會給你設計更好系統的不錯指導。
身份驗證和訪問控制
本書包含的主題非常全面。當你構建新的PHP應用程式時,某些首要考慮是:
- 誰能夠訪問哪些資源?
- 誰能夠控制其他使用者訪問?
這是考慮應用程式、特別是處理敏感資料的應用程式的重要地方。企業裡的相當一部分開發就是致力於此。如果你不正確地建立了身份驗證和訪問控制,最可能發生的就是你讓使用者感到困擾,併產生了更多的工作。比這更糟糕的是伺服器資料缺口 以及/或者 資料毀壞。
本書很好地覆蓋了基礎知識,然後它深入到像控制訪問檔案或應用程式單個頁面之類的工作,還有很多供參考的程式碼示例。
特定利用
本書涵蓋了一些普通的利用來破壞系統,非常詳細地探索了跨站點指令碼,它可以說是攻擊者利用應用程式的最普通的方法。它解釋了不同種類的攻擊,以及如何保護自己。
我最喜歡這本書的地方
在閱讀本書過程中,我真正享受的是,資訊是如何以對於初學者和有經驗的程式設計師都有用的方式呈現的。有一系列概念被提出,它們是什麼以及如何自我保護。有大量的程式碼示例,而不像一些技術書籍所具備的“填充碼”。
你可以很快通讀本書,因為沒有太多內容。新手可以通讀本書,檢查每個主題,開始看看他們的程式碼,並作出修正。記住在這個事情上,你需要持續修改。如果你回頭看看,一定會為六個月前寫的程式碼感到羞愧,你在做正確的事情。
更高階的、有經驗的程式設計師可以使用這個指南填補他們的弱點(不管你在這個行當多長時間了,你有弱點的,承認吧),更好地瞭解他們在工作中使用的系統。例如,這麼多年我瘋了似的使用身份驗證,但是從來沒有在本書提到的層面考慮過。
不管你是誰,你會學到東西的。因此不要看本文了,去買一份拷貝吧!使用這個連結購買是有折扣的!!
免責宣告
我沒有在我的部落格做過多評論,因此你可能有一些問題。為清楚起見,我沒有為評論收取付費或賠償。上面的優惠碼給我部落格的讀者在原書價格基礎上少4美元,我不會收到錢的。當然為了評論的目的,我收到過本書的促銷拷貝。
我本人認識這個作者,那是我相信本書裡的資訊、完全信任其指導的原因之一。這幾年Ben Edmunds在PHP社群有巨大的影響力,他有著10年的PHP經驗,他是PHP使用者組在波蘭區域的領導者之一,這幾年在PHP開源專案做出了巨大的貢獻。可以這麼說,他知道他的東西,你能夠相信這裡呈現的資訊。
- 原文地址:http://www.jeremymorgan.com/blog/programming/the-book-every-php-dev-should-read/
- 注1:ROT13(迴轉13位,rotate by 13 places,有時中間加了個連字元稱作ROT-13)是一種簡易的替換式密碼。http://zh.wikipedia.org/wiki/ROT13
相關文章
- 每個開發者都應該知道的33個JavaScript概念JavaScript
- 每個 Java 開發者都應該知道的 5 個註解Java
- 每個Java開發者都應該知道的5個JDK工具JavaJDK
- 每個MySQL開發者都應該瞭解的10個技巧MySql
- 每個程式設計師都應該讀的書程式設計師
- 重要!每個開發者都應該掌握的9個核心演算法演算法
- 每個開發者都應該使用的VSCode外掛 - tvkoushikVSCode
- 每個Android開發者都應該瞭解的資源列表Android
- 為什麼每個Android開發者都應該使用AnkoAndroid
- 每個C++開發者都應該使用的十個C++11特性C++
- 每個程式設計師都應該知道的 15 個最佳 PHP 庫程式設計師PHP
- 每個Web開發者都應該知道的關 URL編碼的知識Web
- 書單推薦:每個程式設計師的程式設計之路上都應該看這11本書程式設計師
- [譯] 為什麼每個 Android 開發者都應該嘗試 FlutterAndroidFlutter
- Rework:每個程式設計師都應該讀的一本書程式設計師
- 每個架構師都應該讀的八本經典書籍架構
- 每個Javascript開發者都應當知道的那些事JavaScript
- IT職場:每個黑帶都應該知道的事
- [譯]每個 iOS 開發者都該知道的 17 個 Xcode 小技巧iOSXCode
- 每一個企業家都應該讀的10本書【求譯文】
- 每個 Linux 新手都應該知道的 10 個命令Linux
- 每個CIO都應該問的IT轉型問題
- 求職季 | 為什麼每個開發者都應該堅持經營一個部落格?求職
- 每個程式設計師都該閱讀的10本書程式設計師
- 每個Android迷都應該使用的75個超酷AppAndroidAPP
- 每個開發都應該懂的正規表示式
- 每個 Java 開發者應該知道(並愛上)的 8 個工具Java
- 每個Android開發者應該知道的6個SDK和APIAndroidAPI
- 每個人都應該知道的jQuery的提示jQuery
- 你眼中的Python大牛,應該都看過這些書Python
- 有關網頁渲染,每個前端開發者都該知道的那點事網頁前端
- 每個架構師都應該研究下康威定律架構
- 每個開發人員都應該知道的WebSockets知識Web
- 每個Python新手都應該知道的程式設計技巧Python程式設計
- 每個 Python 高手都應該知道的內建函式Python函式
- 每個工程師都應該瞭解的:聊聊冪等工程師
- 每個android專案都應該使用的android 庫Android
- 每個電商企業都應該分析的9種資料