首頁  >  文章  >  後端開發  >  新手培養php一些良好的安全習慣:關閉錯誤提示和嚴格資料驗證等

新手培養php一些良好的安全習慣:關閉錯誤提示和嚴格資料驗證等

伊谢尔伦
伊谢尔伦原創
2017-07-17 11:22:421681瀏覽

大家在使用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[&#39;bloger&#39;]   
//因为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中文網其他相關文章!

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