日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

php escapeshellcmd多字節(jié)編碼漏洞(2)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:詳細講解PHP中緩存技術(shù)的應(yīng)用
PHP,一門最近幾年興起的web設(shè)計腳本語言,由于它的強大和可伸縮性,近幾年來得到長足的發(fā)展,php相比傳統(tǒng)的asp網(wǎng)站,在速度上有絕對的優(yōu)勢,想mssql轉(zhuǎn)6萬條數(shù)據(jù)php如需要40秒,asp不下2分鐘.但是,由于

可以看到,php通過將",',#,&,;.....等等在shell命令行里有特殊意義的字符都通過在前面加上變成".',#,&,;......來進行轉(zhuǎn)義,使得用戶的輸入被過濾,來避免產(chǎn)生command injection漏洞。在php看來,只要過濾了這些字符,送入到system等函數(shù)中時,參數(shù)就會是安全的,php手冊中給出的利用例子如下:

<?php
$e=escapeshellcmd($userinput);
//herewedon'tcareif$ehasspaces
system("echo$e");
$f=escapeshellcmd($filename);
//andherewedo,soweusequotes
system("touch"/tmp/$f";ls-l"/tmp/$f"");
?>

很明顯,如果沒有經(jīng)過escapeshellcmd的處理,用戶輸入hello;id的話,最后system執(zhí)行的會是:

echo hello;id

;在shell里是分割命令的作用,這樣不僅僅會echo hello,還會執(zhí)行id這個命令,導(dǎo)致命令注入漏洞。用escapeshellcmd處理之后命令變成:

echo hello;id

這樣執(zhí)行的命令就只會是echo,其他的都變成echo的參數(shù),很安全。

事實上是這樣么?php在處理完參數(shù)送入system之后它就什么都不管了,后面的工作實際上都是由linux來完成的,那么linux在處理這些參數(shù)的時候是怎么樣的呢?linux在執(zhí)行命令的時候會有一些的表示工作環(huán)境的環(huán)境變量,譬如PWD代表當前的工作環(huán)境,UID代表了你的身份,BASH代表命令解釋器等等......而在linux系統(tǒng)執(zhí)行命令的時候,還有一個非常重要的參數(shù),LANG,這個參數(shù)決定了linux shell如何處理你的輸入,這樣就可以當你輸入一些中文字符的時候,linux能認識他,不至于出現(xiàn)人與系統(tǒng)之間出現(xiàn)理解上的錯誤。默認情況下,linux的LANG是en_US.UTF-8,UTF-8是一個很安全的字符集,其系列中包含有對自身的校驗,所以不會出現(xiàn)錯誤,會工作良好。一些系統(tǒng)支持多字節(jié)字符集如GBK的時候,這也正是國內(nèi)的多數(shù)情況,你可以設(shè)置LANG=zh_CN.GBK,這樣你的輸入都會被當作GBK編碼處理,而GBK是雙字節(jié)的,合法的GBK編碼會被認為是一個字符。

分享:利用PHP V5開發(fā)多任務(wù)應(yīng)用程序
許多 PHP 開發(fā)人員認為,由于標準的 PHP 缺少線程功能,因此實際 PHP 應(yīng)用程序不可能執(zhí)行多任務(wù)處理。例如,如果應(yīng)用程序需要其他 Web 站點的信息,那么在遠程檢索完成之前它都必須停止。這是錯

來源:模板無憂//所屬分類:PHP教程/更新時間:2008-08-22
相關(guān)PHP教程