一:php功能:
php有許多適合於web開發的功能。一些在其它語言中很難實現的普通工作在php中變得易如反掌,這有好處也有壞處。有乙個功能比其它功能來更引人注目,這個功能就是register_globals。
1.1.1. 全域性變數註冊
如果您還能記起早期web應用開發中使用c開發cgi程式的話,一定會對繁瑣的表單處理深有體會。當php的register_globals配置選項開啟時,複雜的原始表單處理不復存在,公用變數會自動建立。它讓php程式設計變得容易和方便,但同時也帶來了安全隱患。
事實上,register_globals是無辜的,它並不會產生漏洞,同時還要開發者犯錯才行。可是,有兩個主要原因導致了您必須在開發和佈署應用時關閉register_globals:
第一,它會增加安全漏洞的數量;
第二,隱藏了資料的**,與開發者需要隨時跟蹤資料的責任相違背。
本書中所有例子都假定register_globals已被關閉,用超級公用陣列如$_get 和 $_post取而代之。使用這些陣列幾乎與register_globals開啟時的程式設計方法同樣方便,而其中的些許不便是值得的,因為它提高了程式的安全性。
小提示
如果您必須要開發乙個在register_globals開啟的環境中佈署的應用時,很重要的一點是您必須要初始化所有變數並且把error_reporting 設為 e_all(或 e_all | e_strict)以對未初始化變數進行警告。當register_globals開啟時,任何使用未初始化變數的行為幾乎就意味著安全漏洞。
1.1.2. 錯誤報告
沒有不會犯錯的開發者,php的錯誤報告功能將協助您確認和定位這些錯誤。可以php提供的這些詳細描述也可能被惡意攻擊者看到,這就不妙了。使大眾看不到報錯資訊,這一點很重要。做到這一點很容易,只要關閉display_errors,當然如果您希望得到出錯資訊,可以開啟log_errors選項,並在error_log選項中設定出錯日誌檔案的儲存路徑。
由於出錯報告的級別設定可以導致有些錯誤無法發現,您至少需要把error_reporting設為e_all(e_all | e_strict 是最高的設定, 提供向下相容的建議, 如不建議使用的提示).
所有的出錯報告級別可以在任意級別進行修改,所以您如果使用的是共享的主機,沒有許可權對php.ini, httpd.conf, 或 .htaccess等配置檔案進行更改時,您可以在程式中執行出錯報告級別配置語句:
code:
<?php
ini_set('error_reporting', e_all | e_strict);
ini_set('display_errors', 'off');
ini_set('log_errors', 'on');
ini_set('error_log', '/usr/local/apache/logs/error_log');
?>
小提示
對php.ini的選項配置作了詳盡的說明。
php還允許您通過 set_error_handler( ) 函式指定您自已的出錯處理函式:
code:
<?php
set_error_handler('my_error_handler');
?>
上面程式指定了您自已的出錯處理函式my_error_handler( ); 下面是乙個實際使用的示例:
code:
<?php
function my_error_handler($number, $string, $file, $line, $context)
?>
小提示
php 5還允許向set_error_handler( )傳遞第二個引數以限定在什麼出錯情況下執行出定義的出錯處理函式。比如,現在建立乙個處理告警級別(warning)錯誤的函式:
code:
<?php
set_error_handler('my_warning_handler', e_warning);
?>
php5還提供了異常處理機制,詳見
php 安全基礎 第一章簡介 原則
1.2.原則 你可以列出一大堆開發安全應用的原則,但在本處我選取了我認為對php開發者最重要的幾個原則。這些原則有意的寫得抽象和理論化。這樣做的目的是幫助你從大處著眼,不拘泥於細節。你需要把它們看成是你行動的指南。1.2.1.深度防範 深度防範原則是安全專業人員人人皆知的原則,它說明了冗餘安全措施的...
PHP基礎內容彙總 第一章
php第一天 環境安裝 1.幹什麼用 安裝伺服器.伺服器會把 php 檔案解釋執行,並且將 html 結果返回給瀏覽器 lamp 概念 用 a 代表 變數的特性 1.儲存資料 2.多次取出使用 3.新資料 覆蓋 舊資料 變數的賦值 資料型別 四種標準資料型別 字串 string 整數型 int in...
第一章 簡介
執行緒的優勢 發揮多處理器的強大能力 由於基本的排程單位是執行緒,因此如果在程式中只有乙個執行緒,那麼最多同時只能在乙個處理器上執行。在雙處理器系統上,單執行緒的程式只能使用一半的cpu資源,而在擁有100個處理器的系統上,將有99 的資源無法使用。在gui應用,執行緒可以提高使用者介面的響應靈敏度...