国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 中的一些 “陷阱”

JerryC / 2962人閱讀

摘要:現(xiàn)在我們總結(jié)一下,有可能會遇到的一些中的一些陷阱。陷阱二判斷數(shù)組里是否存在用戶所提交的用戶小明湯姆奧立升輸出結(jié)果,此結(jié)果明顯錯誤我發(fā)現(xiàn)這個問題,是因為網(wǎng)站被注入了,還好,那么時候在測試的時候發(fā)現(xiàn)的,沒有造成嚴重的后果。

在做開發(fā)的時候,有可能會忘記掉一些技術(shù)細節(jié)。這些細節(jié)有可能會造成很嚴重的后果,比如網(wǎng)站被注入、網(wǎng)站崩潰等等。現(xiàn)在我們總結(jié)一下,有可能會遇到的一些 PHP 中的一些 “陷阱”。

陷阱一:empty()

最新的官網(wǎng)手冊對此有特別說明:

Note:
在 PHP 5.5 之前,empty() 僅支持變量;任何其他東西將會導(dǎo)致一個解析錯誤。
換言之,下列代碼不會生效: empty(trim($name))。 作為替代,應(yīng)該使用trim($name) == false.

我最近一次遇到該錯誤,是使用 Phalcon 開發(fā)的時候,服務(wù)器一直報 503 錯誤,剛開始會覺得莫名其妙,通過逐行排除,才發(fā)生由于 empty 的錯誤用法導(dǎo)致的。當(dāng)然,自從 PHP 5.5 開始,empty 已經(jīng)支持這種寫法了。

陷阱二:in_array()
 "小明",
    1092 => "湯姆",
    1256 => "奧立升"
];

if(in_array($post_dirty_id, array_keys($safe_arr))) {

    echo "find me";

} else {

    echo "do not find me";

}

//輸出結(jié)果:find me,此結(jié)果明顯錯誤

我發(fā)現(xiàn)這個問題,是因為網(wǎng)站被 SQL 注入了,還好,那么時候在測試的時候發(fā)現(xiàn)的,沒有造成嚴重的后果。

關(guān)于 in_array() 函數(shù)使用,還有其他值得我們注意的地方,PHP 手冊中,有大量的網(wǎng)友提供的示例,來說明該函數(shù)的“怪異”行為,比如:

 "y"];
 var_dump(in_array(25, $a)); // true, one would expect false
 var_dump(in_array("ggg", $a)); // true, one would expect false

 var_dump(in_array(0, $a)); // true
 var_dump(in_array(null, $a)); // false

為了安全起見,建議可以采用下面這種方式進行判斷:

 "小明",
    1092 => "湯姆",
    1256 => "奧立升"
];

if(isset($safe_arr[$post_dirty_id])) {

    echo "find me";

} else {

    echo "do not find me";

}

//輸出結(jié)果:do not find me,這是正確的結(jié)果

如果遇到其他的問題,我都會在這里記錄...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21351.html

相關(guān)文章

  • JavaScript中,關(guān)于變量和聲明的一些

    摘要:主要講述了中關(guān)于變量聲明和代碼編寫時你可能沒它留意的一些坑。但是換行符并不會被忽略,換行符起到了分號的功能。需要注意的是,大小寫敏感,和是兩個不同的變量。保留字中有一批稱為保留字的家伙是不能用做變量的,用了在一些瀏覽器中很可能會報錯。 今天翻譯的這篇文章依舊比較基礎(chǔ),是這個系列文章的第三篇。主要講述了JavaScript中關(guān)于變量聲明和代碼編寫時你可能沒它留意的一些坑。 那些熟悉PHP...

    lowett 評論0 收藏0
  • React官方團隊實例原生Hook閉包陷阱

      陷進到處都是啊!本篇文章就說說Hooks使用時存在所謂的閉包陷阱,看看下面代碼:  functionChat(){   const[text,setText]=useState('');   constonClick=useCallback(()=>{   sendMessage(text);   },[]);   return<SendButtononClick=...

    3403771864 評論0 收藏0
  • 正則表達式易錯點小結(jié)!

    摘要:舉例說明百度谷歌正則如下結(jié)果是把全部的字符串都匹配到了其實,我們只需要加上修飾符,這樣,這樣一旦成功匹配一次的話,正則就不會繼續(xù)進行匹配了個人認為應(yīng)該是的意思,表示在匹配的時候忽略大小寫。 最近在學(xué)習(xí)正則表達式,發(fā)現(xiàn)原來理解的正則表達式不是特別的準(zhǔn)確,甚至有誤!在這里簡單記錄一下,希望對有的朋友能夠有所幫助! ①[]:字符集(字符簇,字符組……) 他的真正含義是或的意思!例如:[123...

    邱勇 評論0 收藏0
  • 【ES6】改變 JS 內(nèi)置行為的代理與反射

    摘要:通過對這些底層內(nèi)置對象的代理陷阱和反射函數(shù),讓開發(fā)者能進一步接近引擎的能力。顯然,與要求代理目標(biāo)對象必須是一個函數(shù),這兩個代理陷阱在函數(shù)的執(zhí)行方式上開啟了很多的可能性,結(jié)合使用就可以完全控制任意的代理目標(biāo)函數(shù)的行為。 代理(Proxy)可以攔截并改變 JS 引擎的底層操作,如數(shù)據(jù)讀取、屬性定義、函數(shù)構(gòu)造等一系列操作。ES6 通過對這些底層內(nèi)置對象的代理陷阱和反射函數(shù),讓開發(fā)者能進一步接...

    lushan 評論0 收藏0
  • PHP 中「自增、自減」運算引發(fā)的奇怪問題

    摘要:在的官方手冊中寫道支持風(fēng)格的前后遞增與遞減運算符。第一個注意事遞增遞減運算符不影響布爾值。遞增遞減布爾值遞增遞減在處理字符變量的算數(shù)運算時,沿襲了的習(xí)慣,而非的。還有一個注意事項遞增遞減其他字符變量則無效,原字符串沒有變化。 在 PHP 的官方手冊中寫道: PHP 支持 C 風(fēng)格的前/后遞增與遞減運算符。 第一個注意事:遞增/遞減運算符不影響布爾值。遞減 NULL 值也沒有...

    madthumb 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<