整理一些PHP開發安全問題

整理一些PHP開發安全問題

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





 簡單介紹

  當開發一個互聯網服務的時候,必須時刻牢記安全觀念,並在開發的代碼中體現。PHP腳本語言對安全問題並不關心,特別是對大多數沒有經驗的開發人員來講。

每當你講不論什麼涉及到錢財事務等交易問題時,需要特別注意安全問題的考慮,好比開發一個論壇或者是一個購物車等。javascript




 安全保護通常性要點

不相信表單

  對於通常的Javascript前臺驗證,由於沒法得知用戶的行爲。好比關閉了瀏覽器的javascript引擎,這樣經過POST惡意數據到server。

需要在server端進行驗證,對每個php腳本驗證傳遞到的數據,防止XSS攻擊和SQL注入


不相信用戶

  要若是你的站點接收的每一條數據都是存在惡意代碼的。存在隱藏的威脅,要對每一條數據都進行清理


關閉全局變量

  在php.ini文件裏進行下面配置:

php

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; } ?html

>java



  此處,若是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

web


 SQL注入攻擊

  對於操做數據庫的SQL語句。需要特別注意安全性,因爲用戶可能輸入特定語句使得原有的SQL語句改變了功能。相似如下的樣例: 

 擴展閱讀

《PHP安全編程系列》系列技術文章整理收藏sql

PHP安全編程系列收藏夾收藏了有關PHP安全編程方面的知識,對PHP安全編程提供學習參考 shell

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安全編程:password嗅探與重播攻擊

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站點常見安全漏洞。及對應防範措施總結

相關文章
相關標籤/搜索