我剛剛登陸了PHP5演出。我不會處理涉及超敏感數據的應用程序部分,但我仍然對安全和加密方法感到難堪。我只知道非常基礎(不要以明文存儲密碼,不允許用戶使用後期數據運行代碼等)。我需要知道什麼才能保證我的應用程序安全,並且我可以在哪裏學習?每個Web開發人員應該瞭解哪些加密技術?
回答
瞭解哈希和加密的區別。加密通常是對字符串的雙向解釋。我可以加密我的密碼,然後再解密爲明文。哈希背後的想法是,它們成爲單向的「加密」。
在我的網站上,我將密碼存儲爲散列。任何時候用戶登錄時,我都會重新提供他們提供的密碼,並根據存儲在數據庫中的散列進行測試,並批准它們是否匹配。如果他們忘記密碼,我不能發送他們的密碼,因爲(通常)我無法知道。兩個不同的字符串可以轉換爲相同的散列,這使得(通常)不可能找出原始字符串是什麼。
這是一個很好的理解和辨別何時使用加密和散列的問題。
簡短的回答
你永遠不可能太安全
使用Salted中的密碼哈希以提高安全性
較長的答案(還沒有完成,雖然)
安全性不是網上快速教程學到的東西。它不僅需要深入瞭解存在哪些漏洞,而且還需要爲什麼存在,並且如何他們工作。最大的問題之一(尤其是在開源領域)是,新方法一直在增加,因此我們必須理解安全概念和理論。
閱讀書籍,上課並在本地機器上測試自己的漏洞。然後你會緩慢開始掌握如何保護Web應用程序的概念。
看看下面給您起步
在哪裏學習安全性:得到Schneier的書Applied Cryptography。
無論你做什麼,它都可以被打破。
知道不要編寫自己的加密功能。現有的,可信任的圖書館是儘可能去的最佳途徑。避免使用酷炫,尖端的技術,缺乏許多成功的程序員時間和用戶時間。在第一人稱對自己進行全面測試之前,不要信任您選擇的功能。隨時瞭解可能會在一夜之間阻止您選擇的功能的新發展。要知道,僅僅因爲您使用的是當今最好的加密技術,如果您將密鑰放在桌面上,那麼您已經保護了任何內容(例如,明文不在緩存中或存儲在同一數據庫中的另一個表中,私鑰不是在打開左)
- 瞭解encrypting和hashing
- 之間的差異瞭解原因salts
- 理解HTTP是明文
- 理解什麼是HTTPS是
- 易懂nd你永遠不會(幾乎永遠不會)能夠創建比第三方庫和內置庫已經做得更好的散列或加密方法
請注意以下幾點當你存儲密碼,
散列密碼通常更安全,因爲您不必保守祕密。但是,它會阻止您在身份驗證流程中使用其他基於散列的方案。例如,您不能對哈希密碼使用HTTP摘要驗證。
簡單的散列很容易出現彩虹表攻擊(http://en.wikipedia.org/wiki/Rainbow_table)。請向散列中添加非重新分配的隨機數,或使用nonce作爲HMAC的密鑰。隨機數需要與密碼一起存儲。我將它添加到摘要中。
如果使用加密,請確保使用隨機初始向量,以便相同的密碼將被加密爲不同密碼的不同用戶。否則,你很容易發生模式匹配攻擊。 MySQL有內置的加密命令。它不會注入IV,因此不要將其用於密碼。
使用密文保存密鑰名稱/版本,以便可以旋轉密鑰。密鑰輪換是符合某些標準所必需的。當您不得不更改或旋轉按鍵時,無法解密密鑰信息的加密。
如果你遵循這些建議,你的密碼將是安全的任何加密/散列方案。
查看Open Web Application Security Project。他們有很多關於當前Web應用安全問題的信息,以及您需要採取什麼措施來抵禦這些問題。 OWASP正在編寫一個Development Guide,它提供了許多有關Web應用程序和Web服務開發問題的良好信息。
如果你從一個PHP背景下看它,我會推薦這本書:
的事情,我真的很喜歡這本書是它涵蓋了更而不僅僅是PHP中與安全相關的功能列表。它的很大一部分涵蓋了一般的網絡安全概念和保護機制。權限,最小權限原則,加密,哈希,跨站點腳本,跨站請求僞造,會話劫持等都包含在這裏,以及使用PHP編寫安全代碼的示例。
在大學讀過研究生水平的安全課後,我對本書的報道印象深刻。我認爲它需要閱讀任何專業的PHP開發人員。
- 1. Web開發人員應該瞭解哪些Internet Explorer怪癖?
- 2. 我應該爲Web開發學習哪些新技術?
- 3. 每個.NET開發人員應該知道哪些類/接口?
- 4. PHP/MySQL Web開發人員應該知道哪些服務器?
- 5. 10。我應該使用哪些技術?
- 6. 每個C++開發人員應該瞭解的有關鏈接的知識
- 7. 我應該購買哪些iOS開發人員計劃?
- 8. 在學習LINQ to XML之前我應該瞭解哪些XML相關技術?
- 9. 我應該使用哪種數據加密技術?
- 10. 哪些java技術用於開發android應用程序?
- 11. 術語問題:Web開發人員,Web應用程序開發人員,後端開發人員,前端開發人員?
- 12. 您如何向非技術人員解釋「Web服務」這個術語?
- 13. 我應該瞭解Java開發堆棧的哪些組件?
- 14. 企業Web應用程序推薦的支持技術人員與開發人員比例是多少?
- 15. JSF Facelets - 非技術人員
- 16. 開源REST Web服務技術有哪些優點?
- 17. 每個開發人員都應該知道的PowerShell腳本
- 18. 爲web開發人員訂閱哪些重要的訂閱源?
- 19. Flash開發人員:您測試了哪些Flash版本的Flash?
- 20. Javascript安全技術和問題應該成爲程序員固體Web開發技能的一部分?
- 21. 壓縮技術有哪些?
- 22. ADO.NET包含哪些技術?
- 23. 面向Java開發人員的SOA技術選擇
- 24. 客戶 - 服務器開發人員在理解Web應用程序/開發時面臨哪些障礙?
- 25. 哪些Web技術允許開發靜態用戶界面/表示層
- 26. 應該採用哪些技術來優化@ font-face渲染?
- 27. 應該在遠程服務器上使用哪些Java技術?
- 28. 我應該學習哪些網絡技術?
- 29. AJAX Web開發的最佳技術
- 30. 用於開發Stackoverflow的Web技術?
問題不應該是「每個Web開發人員應該瞭解哪些安全性」?加密只是你問題的一部分,對吧? – 2009-08-03 19:01:57
nyylbharrqgbxabjnobhgrapelcgvbapnaorsbhaqguvegrrapunenpgrefnjnl – Instantsoup 2009-08-03 19:22:54
ebg13vffghcvqnaqunfnofbyhgrylabcynprvanqvfphffvbapbirevatfrphevgl – NotMe 2009-08-05 01:09:57