- php表單
- GET和POST都創建數組
- GET和POST被視作$_GET和$_POST,都是超全局變量,意思就是前段傳來的get或者post的請求,控制器可以不用定義$_GET和$_POST就可以用
- $_GET是通過URL參數傳遞到當前腳本的變量數組
- $_POST是通過HTTP POST傳遞到當前腳本的變量數組
- 我們之所以說GET傳值是不安全的是因為從表單發送的信息對任何人都可見的,都是在url中可以看到的,get對發送信息的數量是有限制的,大約在2000個字符
- 前方高危:注意一定不要用GET方式發送敏感數據,會導致你的信息讓別人看到哦!
- POST傳值從表單發送的信息對其他人都是不可見的,對信息的數量也是沒有限制的
- $_SERVER['PHP_SELF']
- 一種超全局變量,返回的是當前正在執行的腳本名稱
- 將表單數據發送到本身,不進行頁面的跳轉
- php高級
- date函數:把時間戳格式化為更易懂的日期和時間
- 有兩個參數,第一個參數是必填的(Y-m-d H:i:s),第二個是可選的time()
- dete_default_timezone_set:設置時區
- date(“h:i:sa”)
- mktime:創建日期
- mktime(hour,minute,second,month,day,year) 時,分,秒,年,月,日
- strtotime:將可讀的字符串轉換成Unix時間
- include和require語句
- 錯誤處理方面
- require會生成致命錯誤,並停止腳本
- include只生成警告,腳本繼續運行
- 應用場景
- require:當文件被應用程序請求時
- include:當文件不是必需的,且應用程序在文件未找到是應該繼續運行時
- 錯誤處理方面
- 操作文件
- 前方高危
- 當操作文件時必須非常小心,如果操作失誤,可能會造成非常嚴重的破壞
- 常見的錯誤
- 編輯錯誤的文件
- 被垃圾數據填滿硬盤
- 意外刪除文件內容
- readfile:讀取文件,並把它寫入輸出緩存
- fopen:打開文件
- 兩個參數,第一個是打開文件的名字,第二個打開的模式
- 模式
- r:打開文件為只讀,文件指針在文件的開頭開始
- w:打開文件為只寫,刪除文件的內容或創建一個新的文件,如果它不存在,文件的指針在文件的開頭開始
- a:打開文件為只寫,文件中的現有數據會被保留,文件指針在文件結尾開始,如果文件不存在,創建新的文件
- x:創建新文件為只寫,如果文件存在,返回false和錯誤
- r+:同上
- w+:同上
- a+:同上
- x+:同上
- fread:讀取打開的文件
- 兩個參數,第一個參數包含待讀取文件的文件名,第二個參數規定待讀取的最大字節數
- fclose:關閉打開的文件
- 養成用完文件之后將他們全部關閉的習慣
- fgets:用於從文件讀取單行
- feof:檢查是否已到達“end-of-file”
- 對於遍歷未知長度的數據很有用
- fgetc:用於從文件讀取單個字符
- fwrite:用於寫入文件
- 兩個參數,第一個參數包含要寫入的文件的文件名,第二個參數是被寫的字符串
- 后寫入的文件會覆蓋之前文件的內容
- 前方高危
- 文件上傳
- $_FILES
- $_FILES["file"]["name"]:被上傳文件的名稱
- $_FILES["file"]["type"]:被上傳文件的類型
- $_FILES["file"]["size"]:被上傳文件的大小,以字節計
- $_FILES["file"]["tmp_name"]:存儲在服務器的文件的臨時副本的名稱
- $_FILES["file"]["error"]:由文件上傳導致的錯誤代碼
- $_FILES
- 錯誤處理
- php中一些最為重要的錯誤檢測方法
- 簡單的die()語句
- 基本的錯誤處理:使用die()函數
- 自定義錯誤和錯誤觸發器
- 默認錯誤處理程序是內建的錯誤處理程序
- E_USER_ERROR:致命的用戶生成的run-time,錯誤無法恢復,腳本執行被中斷
- E_USER_WARNING:非致命的用戶生成的run-time警告,腳本執行不會被中斷
- E_USER_NOTICE:默認,用戶生成的run-time通知,腳本發現了可能的錯誤,也可能在腳本正常運行時發生
- 創建一個錯誤專用函數,該函數至少有2個參數(error_level,error_message),對多可接受5個參數(可選file,line-number以及error_context)
- error_level:必須,為用戶定義的錯誤規定錯誤報告級別
- error-message:必須,為用戶定義的錯誤規定錯誤消息
- error_file:規定錯誤在其中發生的文件名
- error_line:規定錯誤發生的行號
- error_context:規定一個數組,包含了當錯誤發生時在用的每個變量以及它們的值
- 錯誤報告級別級別
- E_WARNING:非致命的run-time錯誤
- E_NOTICE:run-time通知,腳本發現可能有錯誤發生,但也可能在腳本正常運行時發生
- E_USER_ERROR:致命的用戶生成的錯誤
- E_USER_WARNING:非致命的用戶生成的警告
- E_USER_NOTICE:用戶生成的通知
- E_RECOVERABLE_ERROR:可捕獲的致命錯誤
- E_ALL:所有錯誤和警告除級別E_STRICT以外
- 默認錯誤處理程序是內建的錯誤處理程序
- 錯誤報告
- 簡單的die()語句
- php中一些最為重要的錯誤檢測方法
- 異常處理
- 什么事異常
- 用於在指定的錯誤發生時改變腳本的正常流程
- 當異常被觸發時,通常會發生
- 當前代碼狀態被保存
- 代碼執行被切換到預定義的異常處理器函數
- 處理器也許會從保存的代碼狀態重新開始執行代碼,終止腳本執行,或從代碼中另外的位置繼續執行腳本
- 不同的錯誤處理方法
- 異常的基本使用
- 當異常被拋出時,其后的代碼不會繼續執行,php會嘗試查找匹配的“catch”代碼塊
- 如果異常沒有被捕獲,而且又沒有使用set_seception_handler作相應的處理的話,那么將發生一個嚴重的錯誤,並且輸出“Uncaught Exception”(未捕獲異常)的錯誤消息
- 創建自定義的異常處理器
- 多個異常
- 重新拋出異常
- 設置頂層異常處理器
- 異常的基本使用
- set_exception_handler:設置處理未捕獲異常的用戶定義函數
- Try:使用異常的函數應該位於“try”代碼塊內,如果沒有觸發異常,則代碼將照常執行,如果異常被觸發,將會拋出一個異常
- Throw:規定如何觸發異常,每一個“throw”必須對應至少一個“catch”
- Catch:“catch”代碼塊會捕獲異常,並創建一個包含異常信息的對象
- 異常的規則
- 需要進行異常處理的代碼應該放入try代碼塊內,以便捕獲潛在的異常
- 每個try或throw代碼塊必須至少擁有一個應用的catch代碼塊
- 使用多個catch代碼塊可以捕獲不同種類的異常
- 可以在try代碼塊內的catch代碼塊中再次拋出(re-throw)異常
- 如果拋出異常,就必須捕獲它
- 什么事異常
- 過濾器
- 什么是php過濾器
- 用於驗證和過濾來自非安全來源的數據
- 驗證和過濾用戶輸入或自定義數據是任何web應用程序的重要組成部分
- 設計php的過濾器擴展的目的是使數據過濾更輕松快捷
- 為什么使用過濾器
- 幾乎所有web應用程序都依賴外部的輸入,這些數據通常來自用戶或其他應用程序,通過使用過濾器,能夠確保應有程序獲得正確的輸入類型
- 始終對外部數據進行過濾
- 什么事外部數據
- 來自表單的輸入數據
- cookies
- 服務器變量
- 數據庫查詢結果
- 什么事外部數據
- 輸入過濾是最重要的應用程序安全課題之一
- 函數和過濾器
- 如果需要過濾變量,使用下面的過濾器函數之一
- filter_var:通過一個指定的過濾器函數來過濾單一的變量
- filter_var_array:通過相同的或不同的過濾器來過濾多個變量
- filter_input:獲取一個輸入變量,並對它進行過濾
- filter_input_array:獲取多個輸入變量,並通過相同的或不同的過濾器對它們進行過濾
- 如果需要過濾變量,使用下面的過濾器函數之一
- 兩種過濾器
- Validating
- 用於驗證用戶輸入
- 嚴格的格式規則
- 如果成功則返回預期的類型,如果失敗則返回FALSE
- Sanitizing
- 用於允許或禁止字符串中指定的字符
- 無數據格式規則
- 始終返回字符串
- Validating
- 什么是php過濾器
- date函數:把時間戳格式化為更易懂的日期和時間
- php的安全
- 跨站點腳本(Cross-site scripting , XSS)
- 一種計算機安全漏洞類型,一般都是出現在web應用程序
- XSS能夠使攻擊者向其他用戶瀏覽的網頁中輸入客戶端腳本
- 如何預防
- htmlspecialchars()函數
- 將特殊字符轉化為html實體,這么做的含義是防止攻擊者通過在表單中注入HTML或javascript代碼
- htmlspecialchars()函數
- 在用戶提交表單的時候我們還需要做兩件事:
- 通過PHP trim函數,去除用戶輸入數據中不必要的字符(多余的空格,制表符,換行)
- 通過PHP stripslashes函數,刪除用戶輸入數據中的反斜杠(\)
- 盡量使用檢查函數,$_SERVER['REQUEST_METHOD']
- E-mail注入
- 未經授權的用戶可通過輸入表單在郵件頭部插入數據
- 預防E-mail注入
- 最好的方法是對輸入進行驗證
- FILTER_SANITIZE_EMAIL:從字符串中刪除電子郵件的非法字符
- FILTER_VALIDATE_EMAIL:驗證電子郵件地址
- filter_var:通過指定的過濾器過濾變量
- spamcheck:電子郵件掃描和Linux系統的檢疫制度
- 跨站點腳本(Cross-site scripting , XSS)