1.2.原則
你可以列出一大堆開發安全應用的原則,但在本處我選取了我認為對php開發者最重要的幾個原則。
這些原則有意的寫得抽象和理論化。這樣做的目的是幫助你從大處著眼,不拘泥於細節。你需要把它們看成是你行動的指南。
1.2.1. 深度防範
深度防範原則是安全專業人員人人皆知的原則,它說明了冗餘安全措施的價值,這是被歷史所證明的。
深度防範原則可以延伸到其它領域,不僅僅是侷限於程式設計領域。使用過備份傘的跳傘隊員可以證明有冗餘安全措施是多麼的有價值,儘管大家永遠不希望主傘失效。乙個冗餘的安全措施可以在主安全措施失效的潛在的起到重大作用。
回到程式設計領域,堅持深度防範原則要求您時刻有乙個備份方案。如果乙個安全措施失效了,必須有另外乙個提供一些保護。例如,在使用者進行重要操作前進行重新使用者認證就是乙個很好的習慣,儘管你的使用者認證邏輯裡面沒有已知缺陷。如果乙個未認證使用者通過某種方法偽裝成另乙個使用者,提示錄入密碼可以潛在地避免未認證(未驗證)使用者進行一些關鍵操作。
儘管深度防範是乙個合理的原則,但是過度地增加安全措施只能增加成本和降低價值。
1.2.2. 最小許可權
我過去有一輛汽車有乙個傭人鑰匙。這個鑰匙只能用來點火,所以它不能開啟車門、控制台、後備箱,它只能用來啟動汽車。我可以把它給泊車員(或把它留在點火器上),我確認這個鑰匙不能用於其它目的。
把乙個不能開啟控制台或後備箱的鑰匙給泊車員是有道理的,畢竟,你可能想在這些地方儲存貴重物品。但我覺得沒有道理的是為什麼它不能開車門。當然,這是因為我的觀點是在於許可權的收回。我是在想為什麼泊車員被取消了開車門的許可權。在程式設計中,這是乙個很不好的觀點。相反地,你應該考慮什麼許可權是必須的,只能給予每個人完成他本職工作所必須的盡量少的許可權。
乙個為什麼傭人鑰匙不能開啟車門的理由是這個鑰匙可以被複製,而這個複製的鑰匙在將來可能被用於偷車。這個情況聽起來不太可能發生,但這個例子說明了不必要的授權會加大你的風險,即使是增加了很小許可權也會如此。風險最小化是安全程式開發的主要組成部分。
你無需去考慮一項許可權被濫用的所有方法。事實上,你要**每乙個潛在攻擊者的動作是幾乎不可能的。
1.2.3. 簡單就是美
複雜滋生錯誤,錯誤能導致安全漏洞。這個簡單的事實說明了為什麼簡單對於乙個安全的應用來說是多麼重要。沒有必要的複雜與沒有必要的風險一樣糟糕。
例如,下面的**摘自乙個最近的安全漏洞通告:
code:
<?php
$search = (isset($_get['search']) ? $_get['search'] : '');
?>
這個流程會混淆$search變數受汙染*的事實,特別是對於缺乏經驗的開發者而言。上面語句等價於下面的程式:
code:
<?php
$search = '';
if (isset($_get['search']))
?>
上面的兩個處理流程是完全相同的。現在請注意一下下面的語句:
$search = $_get['search'];
使用這一語句,在不影響流程的情況下,保證了$search變數的狀態維持原樣,同時還可以看出它是否受汙染。
* 譯註:受汙染變數,即在程式執行過程中,該變數的值不是由賦值語句直接指定值,而是來自其它**,如控制台錄入、資料庫等。
1.2.4. 暴露最小化
php應用程式需要在php與外部資料來源間進行頻繁通訊。主要的外部資料來源是客戶端瀏覽器和資料庫。如果你正確的跟蹤資料,你可以確定哪些資料被暴露了。internet是最主要的暴露源,這是因為它是乙個非常公共的網路,您必須時刻小心防止資料被暴露在internet上。
資料暴露不一定就意味著安全風險。可是資料暴露必須盡量最小化。例如,乙個使用者進入支付系統,在向你的伺服器傳輸他的信用卡資料時,你應該用ssl去保護它。如果你想要在乙個確認頁面上顯示他的信用卡號時,由於該卡號資訊是由伺服器發向他的客戶端的,你同樣要用ssl去保護它。
再談談上一小節的例子,顯示信用卡號顯然增加了暴露的機率。ssl確實可以降低風險,但是最佳的解決方案是通過只顯示最後四位數,從而達到徹底杜絕風險的目的。
為了降低對敏感資料的暴露率,你必須確認什麼資料是敏感的,同時跟蹤它,並消除所有不必要的資料暴露。在本書中,我會展示一些技巧,用以幫助你實現對很多常見敏感資料的保護。
php 安全基礎 第一章簡介 php功能
一 php功能 php有許多適合於web開發的功能。一些在其它語言中很難實現的普通工作在php中變得易如反掌,這有好處也有壞處。有乙個功能比其它功能來更引人注目,這個功能就是register globals。1.1.1.全域性變數註冊 如果您還能記起早期web應用開發中使用c開發cgi程式的話,一定...
第一章 簡介
執行緒的優勢 發揮多處理器的強大能力 由於基本的排程單位是執行緒,因此如果在程式中只有乙個執行緒,那麼最多同時只能在乙個處理器上執行。在雙處理器系統上,單執行緒的程式只能使用一半的cpu資源,而在擁有100個處理器的系統上,將有99 的資源無法使用。在gui應用,執行緒可以提高使用者介面的響應靈敏度...
第一章(簡介)
技術手段 包含運用虛擬專用網路 virtual private network vpn 加密協議,入侵檢測系統 intrusion detection system ids 入侵防禦系統 instrusion prevention system ips 訪問控制列表 access control l...