偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

警惕 PHP程序員最易犯10種錯(cuò)誤

開發(fā) 后端
PHP是個(gè)偉大的web開發(fā)語(yǔ)言,靈活的語(yǔ)言,但是看到php程序員周而復(fù)始的犯的一些錯(cuò)誤。本文介紹了10種PHP程序員最容易犯的錯(cuò)誤,一起來(lái)看。

PHP是個(gè)偉大的web開發(fā)語(yǔ)言,靈活的語(yǔ)言,但是看到php程序員周而復(fù)始的犯的一些錯(cuò)誤。我做了下面這個(gè)列表,列出了PHP程序員經(jīng)常犯的10中錯(cuò)誤,大多數(shù)和安全相關(guān)??纯茨惴噶藥追N:

1.不轉(zhuǎn)意html entities

一個(gè)基本的常識(shí):所有不可信任的輸入(特別是用戶從form中提交的數(shù)據(jù)) ,輸出之前都要轉(zhuǎn)意。

  1. echo $_GET['usename'] ; 

這個(gè)例子有可能輸出:

<script>/*更改admin密碼的腳本或設(shè)置cookie的腳本*/</script>

這是一個(gè)明顯的安全隱患,除非你保證你的用戶都正確的輸入。

如何修復(fù):

我們需要將”< “,”>”,”and”等轉(zhuǎn)換成正確的HTML表示(<, >’, and “),函數(shù)htmlspecialchars 和htmlentities()正是干這個(gè)活的。

正確的方法:

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

2. 不轉(zhuǎn)意SQL輸入

我曾經(jīng)在一篇文章中最簡(jiǎn)單的防止sql注入的方法(php+mysql中)討論過(guò)這個(gè)問(wèn)題并給出了一個(gè)簡(jiǎn)單的方法。有人對(duì)我說(shuō),他們已經(jīng)在php.ini中將magic_quotes設(shè)置為On,所以不必?fù)?dān)心這個(gè)問(wèn)題,但是不是所有的輸入都是從$_GET, $_POST或 $_COOKIE中的得到的!

如何修復(fù):和在最簡(jiǎn)單的防止sql注入的方法(php+mysql中)中一樣我還是推薦使用mysql_real_escape_string()函數(shù)

正確做法:

  1. <?php  
  2. $sql = “UPDATE users SET  
  3. name=’.mysql_real_escape_string($name).’  
  4. WHERE id=’.mysql_real_escape_string ($id).’”;  
  5. mysql_query($sql);  
  6. ?> 

3.錯(cuò)誤的使用HTTP-header 相關(guān)的函數(shù):header(), session_start(), setcookie()

遇到過(guò)這個(gè)警告嗎?”warning: Cannot addheader information - headers already sent [....]

每次從服務(wù)器下載一個(gè)網(wǎng)頁(yè)的時(shí)候,服務(wù)器的輸出都分成兩個(gè)部分:頭部和正文。

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

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

4. Require 或include 的文件使用不安全的數(shù)據(jù)

再次強(qiáng)調(diào):不要相信不是你自己顯式聲明的數(shù)據(jù)。不要 Include 或 require 從$_GET,$_POST 或 $_COOKIE 中得到的文件。

例如:

  1. index.php  
  2. <?  
  3. //including header, config, database connection, etc  
  4. include($_GET['filename']);  
  5. //including footer  
  6. ?> 

現(xiàn)在任一個(gè)黑客現(xiàn)在都可以用:http://www.yourdomain.com/index.php?filename=anyfile.txt來(lái)獲取你的機(jī)密信息,或執(zhí)行一個(gè)PHP腳本。

如果allow_url_fopen=On,你更是死定了:

試試這個(gè)輸入:http://www.yourdomain.com/index. … n.com%2Fphphack.php

現(xiàn)在你的網(wǎng)頁(yè)中包含了http://www.youaredoomed.com/phphack.php的輸出. 黑客可以發(fā)送垃圾郵件,改變密碼,刪除文件等等。只要你能想得到。

如何修復(fù):你必須自己控制哪些文件可以包含在的include或require指令中。

下面是一個(gè)快速但不全面的解決方法:

  1. <?  
  2. //Include only files that are allowed.  
  3. $allowedFiles = array(’file1.txt’,'file2.txt’,'file3.txt’);  
  4. if(in_array((string)$_GET['filename'],$allowedFiles)) {  
  5. include($_GET['filename']);  
  6. }  
  7. else{  
  8. exit(’not allowed’);  
  9. }  
  10. ?> 

5. 語(yǔ)法錯(cuò)誤

語(yǔ)法錯(cuò)誤包括所有的詞法和語(yǔ)法錯(cuò)誤,太常見(jiàn)了,以至于我不得不在這里列出。解決辦法就是認(rèn)真學(xué)習(xí)PHP的語(yǔ)法,仔細(xì)一點(diǎn)不要漏掉一個(gè)括號(hào),大括號(hào),分號(hào),引號(hào)。還有就是換個(gè)好的編輯器,就不要用記事本了!

6.很少使用或不用面向?qū)ο?/strong>

很多的項(xiàng)目都沒(méi)有使用PHP的面向?qū)ο蠹夹g(shù),結(jié)果就是代碼的維護(hù)變得非常耗時(shí)耗力。PHP支持的面向?qū)ο蠹夹g(shù)越來(lái)越多,越來(lái)越好,我們沒(méi)有理由不使用面向?qū)ο蟆?/p>

7. 不使用framework

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

8. 不知道PHP中已經(jīng)有的功能

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

9.使用舊版本的PHP

很多程序員還在使用PHP的老版本,老版本上開發(fā)不能充分發(fā)揮PHP的潛能,還存在一些安全的隱患。轉(zhuǎn)到新版本上來(lái)吧,并不費(fèi)很多功夫。大部分PHP老版本程序只要改動(dòng)很少的語(yǔ)句甚至無(wú)需改動(dòng)就可以遷移到新版本上來(lái)。

10.對(duì)引號(hào)做兩次轉(zhuǎn)意

見(jiàn)過(guò)網(wǎng)頁(yè)中出現(xiàn)\’或\’”嗎?這通常是因?yàn)樵陂_發(fā)者的環(huán)境中magic_quotes設(shè)置為off,而在部署的服務(wù)器上magic_quotes=on. PHP會(huì)在 GET, POST 和COOKIE中的數(shù)據(jù)上重復(fù)運(yùn)行addslashes() 。

原始文本:It’s a string

magic quotes on:It\’s a string

又運(yùn)行一次

addslashes():It\\’s a string

HTML輸出:It\’s a string

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

【編輯推薦】

  1. PHP正則表達(dá)式 PHP中的正則函數(shù)
  2. PHP程序員突破成長(zhǎng)瓶頸
  3. PHP開發(fā)必備 PHP持續(xù)集成工具介紹(上)
  4. PHP開發(fā)必備 PHP持續(xù)集成工具介紹(下)
  5. 高手傳經(jīng) 學(xué)習(xí)PHP重在堅(jiān)持
責(zé)任編輯:于鐵 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-11 10:12:59

2013-07-09 13:52:31

程序員Android

2018-09-29 16:10:02

編程語(yǔ)言Java程序員

2009-11-23 15:22:16

2014-04-23 10:15:42

程序員機(jī)器學(xué)習(xí)

2018-09-19 14:45:21

初級(jí)程序員錯(cuò)誤

2015-05-26 10:34:32

程序員最易犯的錯(cuò)誤

2011-07-06 08:49:05

程序員

2021-09-02 08:40:10

程序員錯(cuò)誤

2010-11-09 10:43:14

面試

2014-06-23 09:41:28

數(shù)據(jù)挖掘

2018-05-28 14:55:56

職業(yè)錯(cuò)誤程序員

2013-08-20 10:56:08

BashBash編程Bash錯(cuò)誤

2009-08-26 09:44:18

2015-05-21 09:24:13

生成樹生成樹協(xié)議STP

2017-09-15 11:28:55

程序員編程常犯錯(cuò)誤

2016-01-11 11:32:41

Java程序員錯(cuò)誤

2016-03-25 11:57:23

Java程序員C++

2018-05-07 08:45:43

編程ERPAI

2011-08-29 17:05:55

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)