久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线

返回列表 發(fā)帖
查看: 10981|回復(fù): 4

Discuz!基礎(chǔ)的代碼安全和代碼規(guī)范

83

主題

-6

回帖

329

積分

爐火純青

貢獻(xiàn)
2 點(diǎn)
金幣
241 個(gè)
樓主
發(fā)表于 2019-6-3 13:24:08 | 只看樓主 |倒序?yàn)g覽 |閱讀模式

變量
所有漏洞都來(lái)源于變量,因此變量首先要做的就是定義初始化。用任何一個(gè)變量前一定要先定義,初始化它
雖然現(xiàn)在Discuz!X來(lái)說(shuō),GPC不會(huì)被全局覆蓋了,但是大家寫(xiě)插件的過(guò)程中也不要忽視了
因?yàn)樵诜?wù)器php.ini的配置中 global on 時(shí)
所有的GET POST 都會(huì)變成變量
$_GET['xxx']  如果存在
就會(huì)變成 $xxx 而產(chǎn)生在程序里
因此,你自己要用的變量,一定要初始化

第一點(diǎn),變量的初始化
無(wú)論你要怎么利用變量,一定要初始化
不管是Discuz!還是Discuz!X
由于PHP的歷史原因
你不能相信任何一個(gè)服務(wù)器
只因?yàn)閜hp有個(gè)global on 的參數(shù)
他會(huì)讓GPC變量直接變成全局變量
因此,你自己的變量一定要初始化

第二點(diǎn),認(rèn)清變量的類型
整剛才說(shuō)到,變量一定要初始化,那么初始化成什么類型
如果你要用于數(shù)組

初始化$a = array();
字串 $a ='';
數(shù)字 $a = 0

這樣子,這里說(shuō)說(shuō)數(shù)組,這里又存在一個(gè)php歷史問(wèn)題,這歷史延續(xù)至今。

$s = '123456';
echo $s[2];
等于什么?

[]大家都知,這是數(shù)組的用法,但php太自由了 $s[3] 的數(shù)組用法,竟然可以用在字串里,這個(gè)在大家認(rèn)為很自然。
但是,很多漏洞會(huì)從此誕生,這就是認(rèn)清自己的變量類型的道理所在。
$s[1] 是數(shù)組的用法,可以用在字串中,但是我不推薦大家用,黑客會(huì)這么用在GET中更改你的變量類型。

舉例
echo $s[2];
簡(jiǎn)單這一句,你認(rèn)為這是輸出數(shù)組的一個(gè)項(xiàng),還是字串?
大多數(shù)人會(huì)認(rèn)為這明顯是輸出數(shù)組的一個(gè)項(xiàng)目,但是剛才也看到了,它輸出字串的一個(gè)字節(jié)也可以。
那,我們反過(guò)來(lái)思考,如果程序的某邏輯需要輸出字串的某字節(jié),但是,如果你沒(méi)明確告知變量類型。那么有可能會(huì)讓這一個(gè)字節(jié)變成一個(gè)字串 xxx.php?s[2]=hello

初始化+認(rèn)清自己的變量類型
特別是數(shù)組和字串,如果你要取字串的某一位,安全的方法,可能還是 substr($s, 2, 1)
切忌[]的用法,一定要$a = array() 不要讓他和字串類型的變量產(chǎn)生互用理中

第三點(diǎn)、不要相信任何一個(gè)即將入庫(kù)的變量
進(jìn)很多SQL注入都是從變量開(kāi)始,要仔細(xì)看每一個(gè)SQL語(yǔ)句中可能出現(xiàn)的變量,如,整數(shù)一定要intval;字串一定要addslashes處理,說(shuō)到addslashes,說(shuō)說(shuō)Discuz!的特點(diǎn),國(guó)外某些論壇是,所有變量都無(wú)需addslashes,addslashes只在SQL數(shù)據(jù)庫(kù)類中統(tǒng)一處理,但Discuz!不是,Discuz!會(huì)統(tǒng)一給GPC變量自動(dòng)addslashes。

注意,是只給GPC變量加addslashes,其他的都沒(méi)加。所以,你要注意兩件事:
1. GPC變量你想用于顯示?
那么別忘記stripslashes 后在顯示,否則萬(wàn)一遇到有帶有 ' 的,那就會(huì)多一個(gè)\,I'm 變成 I\'m
htmlspecial只處理<>這些,和單引號(hào)無(wú)關(guān)

2. 再次,剛才說(shuō)過(guò)DZ只處理GPC。因此,GPC之外的所有變量一定要自己addslashes,特別是有些時(shí)候時(shí),把A庫(kù)的東西讀出來(lái)后,直接復(fù)制到B庫(kù)的情況。有人說(shuō)A庫(kù)的東西都入進(jìn)去了,直接入B庫(kù)還不安全嗎?這可不一定,I'm 被A讀取出來(lái)后 直接入B庫(kù),肯定是sql error,必須addslashes。如果要 serialize ,那么 serialize前無(wú)需addslashes,serialize后要,從數(shù)據(jù)庫(kù)中去出來(lái)的肯定是I'm,不是I'\m,serialize是好東西,但不要把a(bǔ)ddslashes后的也給serialize進(jìn)去。

那么,我再繼續(xù)深一步,剛才說(shuō)到了數(shù)據(jù)庫(kù)。
我們保證了入庫(kù)前的所有變量必須是addslashes,但是,如果你不做下面的一件事。那么你再addslashes也是白搭
哪件事呢?
select * from table where id=$id
select * from table where id=I\'m
看,依然sql錯(cuò)誤,而且還被注入

我舉例子
沒(méi)錯(cuò),單引號(hào)封閉,無(wú)論你是什么類型的字段
在Discuz!的規(guī)范里,必須都加單引號(hào)
select * from table where id='$id'
WHERE后面的所有條件
變量必須加單引號(hào),這是規(guī)范。也許你少加一個(gè),并不會(huì)產(chǎn)生漏洞,也只是也許。

但,有些隱形的漏洞就是在七拐八拐中產(chǎn)生的。你少寫(xiě)一個(gè),那些黑客就會(huì)用七拐八拐的方式去分析,看看可否利用行中。
intval是必須的,規(guī)則也是必須遵守的,然后是html的問(wèn)題,不要漏掉任何一個(gè)字串類型。
所有字串類型,如果你不希望他們顯示html,入庫(kù)前一定要htmlspecialchars后再入庫(kù),或者strip_tags下

數(shù)字類型
大家都知道intval,字串是htmlspecialchars,當(dāng)然,后臺(tái)無(wú)所謂!后臺(tái)比較安全,但是,最好也有,一個(gè)習(xí)慣,僅作參考。

$a = '12345';
$a_en = htmlspecialchars($a)
$a_ad = addslashes($a);

這樣,入庫(kù)的時(shí)候sql查詢語(yǔ)句里應(yīng)該都是_ad結(jié)尾的
html模版中的應(yīng)該都是_en結(jié)尾的
我說(shuō)不出很多黑客的那些漏洞屬于
但是剛才說(shuō)的那些如果都做到了,代碼安全不成問(wèn)題

然后說(shuō)說(shuō)Discuz!內(nèi)置的一些變量

Discuz!X中,理論上你要用 $_G ($_G['gp_*'] 除外) 里的變量,都要考慮htmlspecialchars和addslashes
$_G['gp_*'] 是DX里的GPC
GP
GET POST 都經(jīng)過(guò)了 addslashes后存放到了$_G['gp_*]中
但_G中的其他,均沒(méi)addslashes
GPC都addslashes過(guò)
dhtmlspecialchars 支持?jǐn)?shù)組
其他同理
如果你有一個(gè)良好的代碼規(guī)范,也會(huì)讓代碼安全性提高
很多規(guī)范大家可以給自己定,像剛才的$a_en $a_ad

第四點(diǎn),下面簡(jiǎn)單說(shuō)說(shuō)代碼規(guī)范
大家閱讀代碼的時(shí)候也許都看到了
$a = 1;
賦值語(yǔ)句前后空格
if(.........
if后面沒(méi)空格,這些細(xì)節(jié)涉及不到安全,但有一點(diǎn),這些也有安全影響?

SQL
良好的代碼規(guī)范可增加自己的可讀性
DB::query("UPDATE ".DB::table('common_member_count')." set $giftunit = $remaining where uid = $_G[uid]");

Discuz!規(guī)定sql語(yǔ)句中的SQL關(guān)鍵詞必須大寫(xiě)
DB::query("UPDATE ".DB::table('common_member_count')." SET $giftunit='$remaining' WHERE uid='$_G[uid]'");
修正過(guò)的

$giftunit = $remaining
沒(méi)引號(hào),而且大小寫(xiě)不明,閱讀起來(lái)很累,規(guī)范的不規(guī)范的寫(xiě)在一起
雖然站長(zhǎng),不會(huì)看代碼。但是,一個(gè)漂亮代碼文檔,就像一篇好作文。

有一個(gè)SQL上的細(xì)節(jié) notifications=notifications+1
這種SQL語(yǔ)句,理論上我們不推薦,雖然這么寫(xiě)本身是正確的
如果a字段是unsigned類型,那么會(huì)產(chǎn)生數(shù)暴增
產(chǎn)生溢出

a=a+'-1'
就不會(huì)

mysql好奇怪的
這點(diǎn)大家通過(guò)pma試試就知道了

插件如有減分操作的時(shí)候
當(dāng)a=0的時(shí)候
1、a=a-1
2、a=a+'-1'
3、a=a+(-1)
三種方法,你看哪個(gè)ok

下面說(shuō)最后一點(diǎn)
涉及安全的,代碼的流程,你的程序,如果只在你的流程下運(yùn)作
允許100、1000次也許都不會(huì)出錯(cuò)。但是,在別人那里,不一定

舉例
foreach($array as $k => $v)
嗯,$array是數(shù)組,并且存在的時(shí)候。。。

沒(méi)錯(cuò),是,你自己調(diào)試的時(shí)候,這數(shù)組肯定有
但是在用戶那里,有可能就沒(méi)了
這時(shí)候,這語(yǔ)句有錯(cuò)

如果$array不是數(shù)組的情況下,這句就錯(cuò)了
你可以if(is_array($array))
也可以(array)$array

類似影響流程的不僅僅是foreach
如rawurlencode
echo rawurlencode('sss');
誰(shuí)都知沒(méi)問(wèn)題
但!!回到剛才我曾說(shuō)過(guò)的,認(rèn)清變量類型
echo rawurlencode(array('11'));

肯定出錯(cuò),大家可以測(cè)試下
因此 rawurlencode($s) 的時(shí)候
一定要確保$s是字串還是數(shù)組

用php的每一個(gè)函數(shù)的時(shí)候都要看清接受參數(shù)的類型
如果是字串,切記剛才說(shuō)的
php很傻,有時(shí)候字串、數(shù)組不分
這是最后一點(diǎn),爆路徑,爆路徑后能干啥,黑客最清楚
回復(fù)

使用道具 舉報(bào)

15

主題

1886

回帖

2187

積分

應(yīng)用開(kāi)發(fā)者

discuz 老兵

貢獻(xiàn)
12 點(diǎn)
金幣
198 個(gè)
QQ
沙發(fā)
發(fā)表于 2019-6-7 23:01:14 | 只看Ta
收藏了~~  下次開(kāi)發(fā)插件前注重以下
回復(fù)

使用道具 舉報(bào)

3

主題

121

回帖

188

積分

應(yīng)用開(kāi)發(fā)者

貢獻(xiàn)
0 點(diǎn)
金幣
58 個(gè)
板凳
發(fā)表于 2019-6-9 08:38:28 | 只看Ta
感謝分享,
回復(fù)

使用道具 舉報(bào)

0

主題

4

回帖

8

積分

初學(xué)乍練

貢獻(xiàn)
0 點(diǎn)
金幣
4 個(gè)
地板
發(fā)表于 2019-8-9 10:38:27 | 只看Ta
本帖最后由 ssbaoer89 于 2019-8-9 10:40 編輯

機(jī)會(huì)是留給
回復(fù)

使用道具 舉報(bào)

12

主題

87

回帖

220

積分

應(yīng)用開(kāi)發(fā)者

貢獻(xiàn)
1 點(diǎn)
金幣
71 個(gè)
5#
發(fā)表于 2019-8-9 11:56:12 | 只看Ta
還有很多歷史原因遺留的嚴(yán)重BUG,
php的正則匹配中小數(shù)點(diǎn).即使你后面沒(méi)有加/s也是包括\r這個(gè)換行符的(網(wǎng)絡(luò)上所有的教程說(shuō)法都是錯(cuò)誤誤導(dǎo)的),

還有PHP_EOL這個(gè)常量千萬(wàn)不能用,因?yàn)樗趙indows下等同于\r\n,linux下等同于\n, 比如現(xiàn)在是windows寫(xiě)入和讀取后分割都是用\r\n確實(shí)沒(méi)有問(wèn)題, 但如果你以后服務(wù)器換到了linux的話分割用PHP_EOL \n那么以前在windows時(shí)寫(xiě)入的數(shù)據(jù)分割后后面全部會(huì)平白無(wú)故多一個(gè)\r出來(lái),長(zhǎng)度完全就不對(duì)了
回復(fù) 1

使用道具 舉報(bào)

本版積分規(guī)則

  • 關(guān)注公眾號(hào)
  • 有償服務(wù)微信
  • 有償服務(wù)QQ

手機(jī)版|小黑屋|Discuz! 官方交流社區(qū) ( 皖I(lǐng)CP備16010102號(hào) |皖公網(wǎng)安備34010302002376號(hào) )|網(wǎng)站地圖|star

GMT+8, 2025-10-18 01:11 , Processed in 0.071975 second(s), 22 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

關(guān)燈 在本版發(fā)帖
有償服務(wù)QQ
有償服務(wù)微信
返回頂部
快速回復(fù) 返回頂部 返回列表
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
日本不卡视频在线| 高清国产一区二区三区| 日韩av不卡一区二区| 亚洲国产专区校园欧美| 国产视频一区在线播放| 成+人+亚洲+综合天堂| 欧美一区二区三区色| 老司机午夜精品| 91福利资源站| 免费成人在线观看| 色中色一区二区| 亚洲mv在线观看| 亚洲国产日韩欧美| 自拍偷拍亚洲欧美日韩| 欧美精品激情| 久久先锋资源网| 懂色av一区二区三区免费看| 777xxx欧美| 国产精品一区2区| 欧美日韩国产小视频| 美女脱光内衣内裤视频久久影院| 久久亚洲综合| 日本aⅴ亚洲精品中文乱码| 在线看国产一区| 久久精品国产亚洲一区二区三区| 欧美三级日韩在线| 久久激五月天综合精品| 欧美图片一区二区三区| 看电视剧不卡顿的网站| 欧美精三区欧美精三区| 国产伦精一区二区三区| 日韩一区二区免费在线电影| 国产盗摄一区二区| 欧美不卡在线视频| 99精品桃花视频在线观看| 国产日韩精品一区二区三区 | 亚洲国产成人高清精品| 久久成人国产| 美女视频网站久久| 欧美精品久久一区| 国产a区久久久| 国产欧美日韩另类一区| 亚洲免费成人| 午夜影院久久久| 欧美三级电影精品| 国产精品18久久久久久久久久久久 | 亚洲综合在线第一页| 性感少妇一区| 免费人成网站在线观看欧美高清| 欧美伊人精品成人久久综合97| 韩国欧美国产一区| 日韩一本二本av| 欧美国产先锋| 亚洲精品视频观看| 一本色道久久综合亚洲精品按摩| 韩国中文字幕2020精品| 精品国产a毛片| 激情六月综合| 日韩精品91亚洲二区在线观看| 欧美乱熟臀69xxxxxx| 成人激情午夜影院| 亚洲国产精品t66y| 无码av免费一区二区三区试看| 欧美日韩高清在线播放| 成人精品国产免费网站| 国产精品免费久久| 免费日韩精品中文字幕视频在线| 国产综合成人久久大片91| 欧美精品一区二区不卡| 亚洲黄色成人| 久久不见久久见中文字幕免费| 亚洲成av人片在www色猫咪| 欧美日韩在线大尺度| 亚洲夂夂婷婷色拍ww47| 精品视频在线看| 97精品国产97久久久久久久久久久久| 亚洲欧洲在线观看av| 色天天综合色天天久久| 成人av先锋影音| 国产精品乱码一区二三区小蝌蚪| 国产日韩精品视频一区二区三区| 蜜桃一区二区三区在线观看| 亚洲精品一区二区三区香蕉| 国产日韩1区| 国产精品一级黄| **欧美大码日韩| 在线观看不卡视频| 99视频在线精品| 亚洲自拍与偷拍| 精品欧美久久久| 国产欧美一区二区色老头| 国产一区二区三区免费观看| 国产精品久久毛片av大全日韩| 色婷婷国产精品综合在线观看| 99riav久久精品riav| 一区二区三区在线观看国产| 欧美猛男gaygay网站| 欧美午夜免费影院| 久久国产欧美日韩精品| 中文字幕av不卡| 欧美久久久久免费| 亚洲精品看片| 国产成人在线电影| aa级大片欧美| 亚洲成a人在线观看| 久久五月婷婷丁香社区| 久久一区二区三区超碰国产精品| 99精品视频中文字幕| 日本不卡在线视频| 国产精品麻豆一区二区| 欧美视频精品在线| 国产精品av久久久久久麻豆网| 久热成人在线视频| 亚洲美女免费在线| 日韩欧美成人午夜| 久久蜜桃资源一区二区老牛| 欧美不卡在线| 国内精品国产三级国产a久久| 亚洲精品免费一二三区| 精品国产乱码久久久久久影片| 久久视频一区| 欧美午夜在线视频| 国产精品99久久久久| 日韩精品一级中文字幕精品视频免费观看 | 成人精品视频一区| 亚洲动漫第一页| 国产亚洲1区2区3区| 欧美日韩一二三区| 国产精品久久久久9999高清| av电影在线观看不卡| 久久成人免费日本黄色| 一区2区3区在线看| 国产丝袜在线精品| 欧美高清视频在线高清观看mv色露露十八| 9久re热视频在线精品| 91一区二区三区在线播放| 激情综合色丁香一区二区| 亚洲一二三区在线观看| 国产精品天干天干在观线| 欧美tickle裸体挠脚心vk| 欧美系列在线观看| 亚洲欧美99| 亚洲国产精品久久久久久女王| av在线不卡免费看| 国产一区二区精品久久99| 亚洲成a人v欧美综合天堂| 欧美国产精品久久| 日韩欧美一级片| 欧美体内she精视频| 亚洲中午字幕| 91久久黄色| 黑丝一区二区| 欧美91精品| 99精品一区二区三区| 国产福利91精品| 久久成人久久鬼色| 蜜臀av性久久久久蜜臀av麻豆| 香蕉加勒比综合久久| 一区二区三区免费看视频| 中文字幕在线视频一区| 久久久国产精华| 91精品国产综合久久福利软件| 欧美在线free| 久久福利电影| 国产亚洲二区| 亚洲最新在线| 亚洲美女黄色| 99精品视频免费观看视频| 在线观看欧美一区| 永久91嫩草亚洲精品人人| 尤妮丝一区二区裸体视频| 在线看无码的免费网站| 亚洲经典一区| 亚洲精品一级| 中文亚洲免费| 国产伦精品一区二区三区四区免费| 最近看过的日韩成人| 伊人蜜桃色噜噜激情综合| 亚洲国产精品一区| 亚洲免费播放| 美女精品一区| 欧美做爰猛烈大尺度电影无法无天| 欧美在线三级电影| 欧美精品乱人伦久久久久久| 欧美福利一区二区| 91麻豆精品久久久久蜜臀| 欧美日韩高清不卡| 欧美乱熟臀69xxxxxx| 欧美大片在线观看| 久久综合成人精品亚洲另类欧美 | 91 com成人网| 日韩亚洲欧美在线观看| 精品日本一线二线三线不卡| 精品精品欲导航| 久久久.com| 成人免费在线视频观看| 亚洲视频一区在线| 亚洲一区在线观看免费观看电影高清 | 亚洲激情自拍| 老鸭窝亚洲一区二区三区|