大家在使用php進行web開發的時候,進場需要注意一些安全配置項,關閉某些功能,防止用戶不經意出現各種問題。
1. 關閉php提示錯誤功能
在php.ini 中把display_errors改成OFF,或在php檔案前加入error_reporting(0)。
使用error_reporting(0);失敗的例子:
<?php error_reporting(0); echo 555 echo 444; ?>
錯誤:
Parse error: parse error, expecting `','' 或 `';'' in E:\webphp\2.php on line 4
很多phper說用error_reporting(0)不行。第一個例子A.php裡面有致命錯誤,導致不能執行,不能執行伺服器則不知有這個功能,所以一樣報錯。
2. 關閉一些「壞功能」
1)關閉magic quotes功能
在php.ini 把magic_quotes_gpc = OFF
避免和addslashes等重複轉義
2)關閉register_globals = Off
在php.ini 把register_globals = OFF
在register_globals = ON的情況下
<?php //$bloger = $_GET['bloger'] //因为register_globals = ON 所以这步不用了直接可以用$bloger echo $bloger; ?>
這種情況下會導致一些未初始化的變數很容易被修改,這也許是致命的。所以把register_globals = OFF關掉
(3)嚴格設定檔權限。
為對應資料夾分配權限,例如包含上傳圖片的檔案不能有執行權限,只能讀取
3. 嚴格的資料驗證,我們要做的是嚴格驗證控制數據流,即使10000萬用戶中有一個是壞用戶也足以致命,再說好的用戶也有時在數據input框無意輸入中文的時,他已經不經意變“壞”了。
為了確保程式的安全性,健全性,資料驗證應該包含
(1) 關鍵資料是否存在。如刪除資料id是否存在
(2) 資料型別是否正確。如刪除資料id是否為整數
(3) 資料長度。如欄位是char(10)型別則要strlen判斷資料長度
(4) 資料是否有危險字元
資料長度問題,如資料庫建表欄位char(25),大多數phper考慮到是否為空、資料型態是否正確,卻忽略字元長度,忽略還好更多是懶於再去判斷長度。
以為前端用js判斷驗證過了,後台不需要判斷驗證。這也是致命,要知道偽造一個表單就幾分鐘的事,js判斷只是為了減少用戶提交次數從而提高用戶體驗、減少http請求減少伺服器壓力,在安全情況下不能防“小人”,當然如果合法用戶在js驗證控制下是完美的,但身為phper我們不能只有js驗證而拋棄再一次安全驗證。
缺少對表單某些屬性例如select、checkbox、radio、button等的驗證,這些屬性在web頁面上開發者已經設定定其值和值域(白名單值),這些屬性值在js驗證方面一般不會驗證,因為合法用戶只有選擇權沒修改權,然後phper就在後端接受數據處理驗證數據的時候不會驗證這些數據,這是一個慣性思維,安全問題也就有了,小人一個偽表單。
表單對應元素name和資料表的欄位名稱一致,如使用者表使用者名稱的欄位是user_name,然後表單中的使用者名稱輸入框也是user_name,這和暴庫沒什麼區別。
以上是新手培養php一些良好的安全習慣:關閉錯誤提示和嚴格資料驗證等的詳細內容。更多資訊請關注PHP中文網其他相關文章!