謹慎使用==比較子,因為PHP是無類型的,但底層的C實現引擎是有類型的。最終都有類型轉換,比如0==”abc”結果是true,這可能不是我們想要的
在語義上是某種明確類型的地方都要使用相關函數明確轉換一下:intval。。。
在一個地方統一定義PHP的檔案包含路徑,這樣在項目的各個地方包含檔案的時候不要帶上路徑,只要檔案名稱就行了,便於檔案的轉移
PHP應用問題還有一個就是不要直接在函數,類方法中使用PHP的全域變數,而應該是提供一個單獨訪問全域變數的代理,可以是對象,也可以只是一個簡單的函數,如果是在類中訪問全域變數,修改為使用代理全域變數的對象,這樣兩個對象之間有明確的依賴關係,不要在函數內部直接使用全域變數或者global 外面的變數,一個函數只應該使用函數參數傳遞進來的資料。自己盡量不要使用全域的變數然後到處global, 注意表單的重複提交。這可以採用令牌。
決定系統是單入口還是多入口
注意編碼:檔案儲存體編碼,頁面編碼,資料庫編碼,使用者的作業系統編碼(使用者直接在地址上輸入內容時FF,Opera會把內容根據作業系統的編碼urlencode編碼,而IE6原樣)
不要暴露檔案的路徑
提交請求後使用者關掉瀏覽器或者點擊瀏覽器的停止或者其它原因網路斷掉後PHP是要繼續處理還是停止處理,PHP如何知道以上情況:connection-handling(ignore_user_abort,register_shutdown_function,connection_status…)
時區問題,如果應用是分布式的話
explode應用在一個空值上將產生一個包含1項內容的數組:array(”"),但後者不是為false。也就是:null是假值,但explode(’,',null)後是真值,所以要小心if(explode(’,',$var))這種條件
$var = null;isset($var)結果為false。
PHP應用問題之安全問題
驗證輸入,不要相信來自使用者的資料(GET,POST,COOKIE),對於一個PHP應用,應該統一的對這些資料進行過濾處理,比如編碼html標籤防止XSS,防止sql注入。
同時對於需要驗證的內容,PHP要在驗證一次,因為用戶端的各種驗證都可以很容易的跳過(偽表單,禁用js及firebug這些可以隨便修改html的工具)。
要注意使用者提交的資料大小。比如post資料或者get資料太大可能會有緩衝溢出問題
小心伺服器的非PHP檔案。如果應用可以上傳或者下載檔案,要避免直接通過檔案名稱讀取檔案而檔案名稱是使用者提供的情況,可能使用者會提供一些自己不該看到的檔案,但PHP程式卻讀出來了。同時不要在返回的html中顯示檔案路徑,檔案的儲存路徑不應讓使用者看到,使用者可能會根據這些路徑猜出其它自己不該看到的檔案
如果會話是儲存在檔案中的,並且web伺服器上還有其它未知的使用者(比如出租的web主機),應該修改會話檔案的儲存位置,或者把會話通過PHP的會話handler寫到資料庫中,因為會話預設儲存在臨時目錄中,其它人可以訪問到,如果會話中儲存了密碼之類的資訊就很危險。
以上就是PHP應用問題的相關解決辦法。
http://www.bkjia.com/PHPjc/446051.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446051.htmlTechArticle謹慎使用==比較子,因為PHP是無類型的,但底層的C實現引擎是有類型的。最終都有類型轉換,比如0==abc結果是true,這可能不是我們想要...