久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

Discuz: 插件代碼的安全規(guī)范:修訂間差異

來(lái)自站長(zhǎng)百科
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索
無(wú)編輯摘要
無(wú)編輯摘要
第21行: 第21行:
<p style="text-indent:2em;">這條視乎是和上面一條雷同,但是即使是從[[數(shù)據(jù)庫(kù)]]中查出來(lái)的數(shù)據(jù)也一樣不能確定,比如生成 cache 文件,如果用戶 POST 的數(shù)據(jù)錯(cuò)誤不是我們期望的數(shù)據(jù),而“恰巧”生成到文件中,于是一個(gè)webshell產(chǎn)生了,同樣這個(gè)例子也不是很合適,我只是希望大家明白這么一點(diǎn),如果我們沒(méi)有一個(gè)很好的處理數(shù)據(jù)的方式,那么代碼的安全崩潰也就指日可待。</p>
<p style="text-indent:2em;">這條視乎是和上面一條雷同,但是即使是從[[數(shù)據(jù)庫(kù)]]中查出來(lái)的數(shù)據(jù)也一樣不能確定,比如生成 cache 文件,如果用戶 POST 的數(shù)據(jù)錯(cuò)誤不是我們期望的數(shù)據(jù),而“恰巧”生成到文件中,于是一個(gè)webshell產(chǎn)生了,同樣這個(gè)例子也不是很合適,我只是希望大家明白這么一點(diǎn),如果我們沒(méi)有一個(gè)很好的處理數(shù)據(jù)的方式,那么代碼的安全崩潰也就指日可待。</p>
<h5>6、不要妄圖直接把低版本的 Discuz! 插件直接運(yùn)行</h5>
<h5>6、不要妄圖直接把低版本的 Discuz! 插件直接運(yùn)行</h5>
<p style="text-indent:2em;">由于每個(gè)大版本的升級(jí)都會(huì)帶來(lái)系統(tǒng)構(gòu)架的一些變化,可能舊版本的插件仍然可以使用,但是或許一些不可預(yù)料的問(wèn)題正在隱藏中,所以建議任何低版本的 [[Discuz]]! 插件最好是經(jīng)過(guò)仔細(xì)研究之后再公告說(shuō)可以適用新版本 Discuz! 插件。</p>
<p style="text-indent:2em;">由于每個(gè)大版本的升級(jí)都會(huì)帶來(lái)系統(tǒng)構(gòu)架的一些變化,可能舊版本的插件仍然可以使用,但是或許一些不可預(yù)料的問(wèn)題正在隱藏中,所以建議任何低版本的 [[Discuz! 插件]]最好是經(jīng)過(guò)仔細(xì)研究之后再公告說(shuō)可以適用新版本 Discuz! 插件。</p>




[[category:Discuz插件說(shuō)明]]
[[category:Discuz插件說(shuō)明]]

2010年10月18日 (一) 10:19的版本

導(dǎo)航: 上一級(jí) | Discuz | 首頁(yè) | PhpWind | 動(dòng)網(wǎng)論壇 | vBulletin | phpBB | MolyX | Discuz!NT

總的來(lái)說(shuō) PHP 還是相對(duì)安全的 Web 程序,但是由于一些代碼在處理方式上的不成熟導(dǎo)致了安全隱患.由于這個(gè)議題范圍太廣,所以推薦 PHPCHINA 的Essential PHP Security -PHP安全基礎(chǔ) 一書(shū)給大家,希望對(duì)大家有幫助。更詳細(xì)的 PHP 安全信息可以登錄 php.net 查找。

那么,對(duì)于插件安全究竟我們要做些什么怎么做?

1、變量的初始化

這里不討論 magic_quotes_gpc 和 register_globals 的設(shè)置情況,大家只要注意不要“無(wú)中生有”變量,每個(gè)變量的得到都是自己初始化過(guò)的。

2、邏輯關(guān)系清楚

對(duì)于邏輯的判定不是一句話能夠說(shuō)明白的,舉個(gè)簡(jiǎn)單的例子,在判斷上傳文件的時(shí)候,我們判斷的依據(jù)是他的后綴是否在我們?cè)试S的后綴里面,如果是允許的就執(zhí)行上傳,反之就提示上傳文件后綴不對(duì),但是如果用戶上傳的文件名是 webshell.xxx.mht(允許mht 文件上傳,mht 是一種網(wǎng)頁(yè)存儲(chǔ)格式),于是文件上傳了,在 apache 系統(tǒng)的默認(rèn)配置下,這個(gè)文件是會(huì)用 PHP 來(lái)解析的,利用這個(gè)算是 BUG 的問(wèn)題吧,小版本人就曾伙同PHP安全界知名人士(幫他匿了)對(duì)我們學(xué)校的服務(wù)器完成了入侵,并最終取得了 root 權(quán)限(目前俺們學(xué)校的服務(wù)器已經(jīng)修正此問(wèn)題),舉這個(gè)例子是為了說(shuō)明程序處理的重要性,如果當(dāng)時(shí)多一步判斷上傳的文件,也許這個(gè)安全問(wèn)題就不再存在,其實(shí)這個(gè)例子來(lái)說(shuō)明邏輯關(guān)系并不是很合適,但是程序處理真的是一個(gè)非常重要的部分。

3、' '與" "的區(qū)別運(yùn)用

單引號(hào)中,任何變量($var)、特殊轉(zhuǎn)義字符(如“\t \r \n”等)不會(huì)被解析,因此PHP的解析速度更快,轉(zhuǎn)義字符僅僅支持“\’”和“\\”這樣對(duì)單引號(hào)和反斜杠本身的轉(zhuǎn)義;

雙引號(hào)中,變量($var)值會(huì)代入字符串中,特殊轉(zhuǎn)義字符也會(huì)被解析成特定的單個(gè)字符,還有一些專門(mén)針對(duì)上述兩項(xiàng)特性的特殊功能性轉(zhuǎn)義,例如“\$”和“{$array[‘key’]}.這樣雖然程序編寫(xiě)更加方便,但同時(shí)PHP的解析也很慢;

數(shù)組中,如果下標(biāo)不是整型,而是字符串類型,請(qǐng)務(wù)必用單引號(hào)將下標(biāo)括起,正確的寫(xiě)法為 $array[‘key’],而不是 $array[key],因?yàn)椴徽_的寫(xiě)法會(huì)使PHP解析器認(rèn)為key是一個(gè)常量,進(jìn)而先判斷常量是否存在,不存在時(shí)才以“key”作為下標(biāo)帶入表達(dá)式中,同時(shí)出發(fā)錯(cuò)誤事件,產(chǎn)生一條 Notice 級(jí)錯(cuò)誤。

因此,在絕大多數(shù)可以使用單引號(hào)的場(chǎng)合,禁止使用雙引號(hào).依據(jù)上述分析,可以或必須使用單引號(hào)的情況包括但不限于下述:

字符串為固定值,不包含“\t”等特殊轉(zhuǎn)義字符;

數(shù)組的固定下標(biāo),例如$array[‘key’];

表達(dá)式中不需要帶入變量,例如$string = ‘test’;而非$string = “test$var”;

4、數(shù)據(jù)的過(guò)濾與處理

對(duì)于任何得到的數(shù)據(jù)在不能確定或者不能充分確定其來(lái)路的時(shí)候一定要進(jìn)行過(guò)濾與處理,在數(shù)據(jù)進(jìn)入程序運(yùn)行處理階段之前,一定要保證它的準(zhǔn)確性和正確性。

5、不要相信任何數(shù)據(jù)的準(zhǔn)確性和正確性

這條視乎是和上面一條雷同,但是即使是從數(shù)據(jù)庫(kù)中查出來(lái)的數(shù)據(jù)也一樣不能確定,比如生成 cache 文件,如果用戶 POST 的數(shù)據(jù)錯(cuò)誤不是我們期望的數(shù)據(jù),而“恰巧”生成到文件中,于是一個(gè)webshell產(chǎn)生了,同樣這個(gè)例子也不是很合適,我只是希望大家明白這么一點(diǎn),如果我們沒(méi)有一個(gè)很好的處理數(shù)據(jù)的方式,那么代碼的安全崩潰也就指日可待。

6、不要妄圖直接把低版本的 Discuz! 插件直接運(yùn)行

由于每個(gè)大版本的升級(jí)都會(huì)帶來(lái)系統(tǒng)構(gòu)架的一些變化,可能舊版本的插件仍然可以使用,但是或許一些不可預(yù)料的問(wèn)題正在隱藏中,所以建議任何低版本的 Discuz! 插件最好是經(jīng)過(guò)仔細(xì)研究之后再公告說(shuō)可以適用新版本 Discuz! 插件。