整理一些PHP開發安全問題

來源:互聯網
上載者:User
整理一些PHP開發安全問題

  php給了開發人員極大的靈活性,但是這也為安全問題帶來了潛在的隱患,近期需要總結一下以往的問題,在這裡借翻譯一篇文章同時加上自己開發的一些感觸總結一下。





 簡介

  當開發一個互連網服務的時候,必須時刻牢記安全觀念,並在開發的代碼中體現。PHP指令碼語言對安全問題並不關心,特別是對大多數沒有經驗的開發人員來說。每當你講任何涉及到錢財事務等交易問題時,需要特別注意安全問題的考慮,例如開發一個論壇或者是一個購物車等。


 安全保護一般性要點

不相信表單

  對於一般的Javascript前台驗證,由於無法得知使用者的行為,例如關閉了瀏覽器的javascript引擎,這樣通過POST惡意資料到伺服器。需要在伺服器端進行驗證,對每個php指令碼驗證傳遞到的資料,防止XSS攻擊和SQL注入


不相信使用者

  要假設你的網站接收的每一條資料都是存在惡意代碼的,存在隱藏的威脅,要對每一條資料都進行清理


關閉全域變數

  在php.ini檔案中進行以下配置:

register_globals = Off



  如果這個配置選項開啟之後,會出現很大的安全隱患。例如有一個process.php的指令檔,會將接收到的資料插入到資料庫,接收使用者輸入資料的表單可能如下:

 



  這樣,當提交資料到process.php之後,php會註冊一個$username變數,將這個變數資料提交到process.php,同時對於任何POST或GET請求參數,都會設定這樣的變數。如果不是顯示進行初始化那麼就會出現下面的問題(參考:http://www.lai18.com/content/434606.html)

 



  此處,假設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 ,這樣可以讓session資訊有儲存許可權,同時設定單獨的網站根目錄

  expose_php設定為Off

  allow_url_fopen設定為Off

  allow_url_include設定為Off


 SQL注入攻擊

  對於操作資料庫的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注入樣本分析和幾種常見攻擊Regex

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網站常見安全性漏洞,及相應防範措施總結

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.