php給了開發者極大的靈活性,但這也為安全問題帶來了潛在的隱患,近期需要總結一下以往的問題,在這裡借翻譯一篇文章同時加上自己開發的一些感觸總結一下。
當開發一個互聯網服務的時候,必須時刻牢記安全觀念,並在開發的程式碼中體現。 PHP腳本語言對安全性問題並不關心,特別是對大多數沒有經驗的開發者來說。每當你講任何涉及到錢財事務等交易問題時,需要特別注意安全問題的考慮,例如開發一個論壇或是一個購物車等。
不相信表單
對於一般的Javascript前台驗證,由於無法得知使用者的行為,例如關閉了瀏覽器的javascript引擎,這樣透過POST惡意資料到伺服器。需要在伺服器端進行驗證,對每個php腳本驗證傳遞到的數據,防止XSS攻擊和SQL注入
#不相信用戶
要假設你的網站接收的每一條資料都是存在惡意程式碼的,存在隱藏的威脅,要對每一條資料都進行清理
關閉全域變數
在php.ini檔案中進行以下設定:
register_globals = Off
如果這個設定選項開啟之後,會出現很大的安全隱患。例如有一個process.php的腳本文件,會將接收到的資料插入資料庫,接收使用者輸入資料的表單可能如下:
<input name="username" type="text" size="15" maxlength="64">
這樣,當提交資料到process.php之後,php會註冊一個$username變量,將這個變數資料提交到process.php,同時對於任何POST或GET請求參數,都會設定這樣的變數。如果不是顯示進行初始化那麼就會出現下面的問題(參考:http://www.lai18.com/content/434606.html)
<?php // Define $authorized = true only if user is authenticated if (authenticated_user()) { $authorized = true; } ?>
此處,假設authenticated_user函數就是判斷$authorized變數的值,如果開啟了register_globals配置,那麼任何使用者都可以發送一個請求,來設定$authorized變數的值為任意值從而就能繞過這個驗證。
所有的這些提交資料都應該透過PHP預先定義內建的全域數組來獲取,包括$_POST、$_GET、$_FILES、$_SERVER、$_REQUEST等,其中$_REQUEST是一個$_GET/$ _POST/$_COOKIE三個數組的聯合變量,預設的順序是$_COOKIE、$_POST、$_GET。
建議的安全配置選項
error_reporting設定為Off:不要暴露錯誤訊息給用戶,開發的時候可以設定為ON
safe_mode設定為Off
register_globals設定為Off
將以下函數停用:system、exec、passthru、shell_exec、proc_open、popen
open_basedir設定為/tmp ,這樣就可以讓儲存空間有儲存權限,同時設置單獨的網站根目錄
expose_php設置為Off
allow_url_fopen設置為Off
allow_url_include設置為Off
對於操作資料庫的SQL語句,需要特別注意安全性,因為使用者可能輸入特定語句使得原有的SQL語句改變了功能。類似下面的範例:
《PHP安全程式設計系列》系列技術文章整理收藏
PHP安全程式設計系列收藏夾收藏了有關PHP安全程式設計的知識,對PHP安全程式設計提供學習參考
1discuz的php防止sql注入函數
#2php防止xss攻擊的方法
3PHP安全性程式設計:對輸出要進行轉義
4PHP安全程式設計:過濾使用者輸入
5PHP安全程式設計:可用性與資料追蹤
6PHP安全程式設計:不要讓不相關的人看到報錯資訊
# 7PHP安全性程式設計:register_globals的安全性
#8PHP安全性程式設計:網站安全設計的一些原則
9PHP安全程式設計:關於表單欺騙提交
10PHP安全程式設計:HTTP請求欺騙
11PHP安全程式設計:不要暴露資料庫存取權限
12PHP安全編程:跨站請求偽造CSRF的防禦
13PHP安全編程:表單與數據安全性
14PHP安全程式設計:從URL的語意進行攻擊
15PHP安全程式設計:檔案上傳攻擊的防禦
16PHP安全程式設計:跨站腳本攻擊的防禦
17PHP安全程式設計:session固定取得合法會話
18PHP安全性程式設計:防止SQL注入
#19PHP安全性程式設計:cookie曝光導致session被劫持
#20PHP安全程式設計:防止原始碼的揭露
#21PHP安全程式設計:留心後門URL
##22PHP安全程式設計:session劫持的防禦
#23PHP安全程式設計:暴力破解攻擊
#24PHP安全編程:密碼嗅探與重播攻擊
25PHP安全性程式設計:記住登入狀態的安全性做法
26PHP安全性程式設計:shell指令注入
27PHP安全性程式設計:開啟遠端檔案的風險
28PHP安全性程式設計:檔案目錄猜測漏洞
29PHP安全程式設計:阻止檔案名稱被操縱
30PHP安全程式設計:檔案所包含的程式碼注入攻擊
31PHP安全程式設計:更優的會話資料安全性
32PHP安全程式設計:共享主機的原始碼安全性
33PHP安全性程式設計:會話資料注入
34PHP安全性程式設計:主機檔案目錄瀏覽
35PHP安全程式設計:PHP的安全模式
#36php安全性直接用$取得值而不$_GET字元轉義
37php防止漏洞策略,建立高效能web
38什麼XSS攻擊? PHP防止XSS攻擊函數
39解析php防止form重複提交的方法
40php安全之狗尾續貂
41PHP防止跨域提交表單
42php防止SQL注入詳解及防範
43php防止sql注入程式碼實例
44php防止sql注入範例分析和幾個常見攻擊正規表示式
##45PHP安全之防止你的原始碼或重要設定資訊暴露在外
46PHP防止post重複提交資料的簡單範例
47php防止偽造的資料從URL提交方法
48PHP防止表單重複提交的幾個常用方法匯總
49php防止偽造資料從網址列URL提交的方法
#50php防止站外遠端提交表單的方法
#51php防止sql注入之過濾分頁參數實例
52PHP安全性以Apache模式安裝時可能遇到的攻擊及解決方法
#53PHP安全之文件系統安全及防範措施
#54PHP安全性檔案系統安全性-Null字元問題
#55PHP安全之資料庫安全性-SQL注入及預防措施
#56PHP安全性簡介與總則
57PHP安全性之以CGI 模式安裝時可能遇到的攻擊及解決方案
#58PHP安全性使用者提交的資料
#59PHP安全之資料庫安全性-設計、連接與加密
#60PHP安全之魔術引號-什麼是魔術引號以及如何使用
61PHP安全性隱藏PHP腳本副檔名
62PHP安全性使用Register Globals
#63PHP安全性錯誤報告
#64php防止惡意刷新與刷票的方法
#65php防止網站被刷新的方法總結
66PHP網站常見安全漏洞,及相應防範措施總結
以上是整理的一些PHP開發安全問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!