熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

如何書寫安全的PHP代碼[1]

2022-06-13   來源: PHP編程 

  PHP是一個很容易學習的語言 許多人在沒有任何編程背景下學習它作為一種去增加一些互動元素到他們的網站的方法 不幸的是這往往意味著PHP程序員尤其是那些較新的Web開發程序員 並沒有覺察他們網站中潛在安全風險 這裡是一些比較常見的安全問題以及如何去避免它們

  永遠永遠信任你的用戶

  不能說足夠的次數你應該永遠永遠 信任你的用戶向你發送你期望的數據 我聽到很多人回應大概是沒有惡意的人將對我的網站感興趣這就錯了 這裡總是有懷有惡意的用戶可以利用一個安全漏洞問題可以很容易被發現因為一個用戶無意中做錯了

  因此 所有網頁的發展的戒律我不能再壓縮了的話就是永遠永遠相信你的用戶假定你的網站從使用者收集的每片數據含有惡意代碼始終 你認為已經檢查客戶端驗證的這些數據例如在JavaScript 如果你能夠達到這個目標你應該有了一個良好的開端如果PHP的安全性很重要這一點就要重要地學習個人來說PHP安全是一個重大的問題

  全局變量

  在許多語言你必須明確地設定一個變量以使用它 在PHP中有一個選項 register_globals 你可以在phpini中設置讓你可以使用全局變量而不需要事先聲明

  考慮下面的代碼

if ($password == my_password) {
$authorized = ;
}

if ($authorized == ) {
echo Lots of important stuff;
}

  許多人看上去覺得沒什麼問題而事實上這方面的代碼在整個網站上應用 但是如果一個服務器開啟register_globals然後只需添加?authorized=的URL將讓任何人都看到 這是一個最普遍的PHP的安全問題

  所幸的是這有兩個簡單的解決辦法 第一也許最好的就是把register_globals關閉 二是你必須明確只有你使用變量 在上面的例子中這將意味著加入?authorized=; 在腳本的開始

$authorized = ;if ($password == my_password) {$authorized = ;}if ($authorized == ) {echo Lots of important stuff;}

  錯誤信息

  錯誤信息是一個非常有用的工具無論是程序員和黑客 開發者需要它們去改正錯誤 黑客可以利用它們來找出一個網站的各種信息 從目錄結構的服務器數據庫登錄信息 如果可能的話最好是關閉所有的錯誤報告 PHP可以完成這項工作 htaccess或phpini設置error_reporting 的值改為 如果你有一個開發環境您可以設定不同的錯誤報告級別

  SQL注入

  PHP的一個最大優點就是它可以方便地與數據庫中操作最顯著的MySQL的 很多人使用這個數據庫不少網站包括這一個依賴於數據庫的函數 然而正如你所料有這麼大的權力你就要夠面對龐大的潛在安全問題 所幸的是有很多解決辦法 最常見面安全問題是一個數據庫 SQL注入當用戶利用一個安全故障在你的數據庫運行SQL語句 讓我們用一個常見的例子 許多登錄系統具有以下特點:一條線看起來象不像是在檢查從表單輸入的用戶名和密碼 比如去控制訪問一個管理員區

$check = mysql_query(Select Username Password UserLevel FROM Users Where Username = $_POST[username] and Password = $_POST[password]);

  看上去很眼熟? 就表面看來它好像做得不錯上述並不像可以做許多破壞 但話又說回來我在username 輸入框輸入這樣的值並提交

   或者 = #

  這個執行語句現在是這個樣子

elect Username Password FROM Users Where Username = or = # and Password = ;

  散列符號(#)告訴MySQL的它之後一切都會被忽略 所以實際上只是執行的SQL到這一點 永遠等於 所以SQL將從數據庫返回所有的用戶名和密碼 在大多數用戶登錄數據庫的首個戶名和密碼組合都是管理員用戶 他干脆輸入了幾個符號作為管理員已登錄你的網站 果他們其實都知道的用戶名和密碼他們會有同樣的權力如

  一個小創意上述情況可以進一步發揮讓用戶建立自己的登錄帳號 閱讀信用卡號碼甚至刪除數據庫

[]  []  


From:http://tw.wingwit.com/Article/program/PHP/201311/21437.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.