首頁  >  文章  >  後端開發  >  PHP安全程式設計-網站安全設計的一些原則

PHP安全程式設計-網站安全設計的一些原則

不言
不言原創
2018-04-09 10:31:391610瀏覽

這篇文章的主要內容是關於PHP安全編程之網站安全設計的一些原則,現在在這裡分享給大家,有感興趣的朋友可以看一下


深度防範


深度防範原則是安全專業人員人人皆知的原則,它說明了冗餘安全措施的價值,這是被歷史所證明的。

深度防範原則可以延伸到其它領域,而不僅僅是局限於程式設計領域。使用過備援傘的跳傘隊員可以證明有冗餘安全措施是多麼的有價值,儘管大家永遠不希望主傘失效。一個冗餘的安全措施可以在主安全措施失效的潛在的起到重大作用。

回到程式設計領域,堅持深度防範原則要求您隨時有備份方案。如果一個安全措施失效了,必須有另一個安全措施提供一些保護。例如,在使用者進行重要操作前進行重新使用者認證就是一個很好的習慣,儘管你的使用者認證邏輯裡面沒有已知缺陷。如果一個未認證用戶透過某種方法偽裝成另一個用戶,提示輸入密碼可以潛在地避免未認證(未驗證)用戶進行一些關鍵操作。

儘管深度防範是一個合理的原則,但是過度地增加安全措施只能增加成本和降低價值。

最小權限

我過去有一輛車有一個傭人鑰匙。這個鑰匙只能用來點火,所以它不能打開車門、控制台、後車箱,它只能用來啟動汽車。我可以把它給泊車員(或把它留在點火器上),我確認這個鑰匙不能用於其它目的。

把一個不能打開控制台或後備箱的鑰匙給泊車員是有道理的,畢竟,你可能想在這些地方保存貴重物品。但我覺得沒有道理的是為什麼它不能開車門。當然,這是因為我的觀點在於權限的收回。我是在想為什麼泊車員被取消了開車門的權限。在程式設計中,這是一個很不好的觀點。相反地​​,你應該考慮什麼權限是必須的,只能給予每個人完成他本職工作所必須的盡量少的權限。

一個為什麼傭人鑰匙不能打開車門的理由是這個鑰匙可以被複製,而這個複製的鑰匙在將來可能被用來偷車。這個情況聽起來不太可能發生,但這個例子說明了不必要的授權會增加你的風險,即使是增加了很小權限也會如此。風險最小化是安全程序開發的主要組成部分。

你不需要去考慮一個權限被濫用的所有方法。事實上,你要預測每一個潛在攻擊者的動作是幾乎不可能的。

簡單就是美

複雜滋生錯誤,錯誤能導致安全漏洞。這個簡單的事實說明了為什麼簡單對於一個安全的應用來說是多麼重要。沒有必要的複雜性與沒有必要的風險一樣糟糕。

例如,以下的程式碼摘自一個最近的安全漏洞通告:

<?php
	 
	$search = (isset($_GET[&#39;search&#39;]) ? $_GET[&#39;search&#39;] : &#39;&#39;);
 
?>

這個流程會混淆$search變數受污染*的事實,特別是對於缺乏經驗的開發者而言(註:受污染變量,即在程式執行過程中,該變數的值不是由賦值語句直接指定值,而是來自其它來源,如控制台輸入、資料庫等。上面語句等價於下面的程式:

<?php
 
  $search = &#39;&#39;;
 
  if (isset($_GET[&#39;search&#39;]))
  {
		$search = $_GET[&#39;search&#39;];
  }
 
?>

上面的兩個處理流程是完全相同的。現在請注意一下下面的語句:

$search = $_GET[&#39;search&#39;];

使用這一語句,在不影響流程的情況下,保證了$search變數的狀態維持原樣,同時還可以看出它是否受污染。

暴露最小化

PHP應用程式需要在PHP與外部資料來源間進行頻繁通訊。主要的外部資料來源是客戶端瀏覽器和資料庫。如果你正確的追蹤數據,你可以確定哪些數據被揭露了。 Internet是最主要的暴露來源,這是因為它是一個非常公共的網絡,您必須時刻小心防止資料暴露在Internet上。

資料暴露不一定就意味著安全風險。可是資料暴露必須盡量最小化。例如,一個用戶進入支付系統,在向你的伺服器傳輸他的信用卡資料時,你應該用SSL去保護它。如果你想要在一個確認頁面上顯示他的信用卡號時,由於該卡號資訊是由伺服器發送給他的客戶端的,你同樣要用SSL去保護它。

例如前面的例子,顯示信用卡號顯然增加了暴露的機率。 SSL確實可以降低風險,但是最佳的解決方案是透過只顯示最後四位數,從而達到徹底杜絕風險的目的。

為了降低對敏感資料的暴露率,你必須確認什麼資料是敏感的,同時追蹤它,並消除所有不必要的資料暴露。在本書中,我會展示一些技巧,用以幫助你實現許多常見敏感資料的保護。

相關推薦:

常見的PHP安全性攻擊及解決方法

php安全實例詳解

PHP安全開發程式庫詳解

以上是PHP安全程式設計-網站安全設計的一些原則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn