久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
Discuz! 官方交流社區
標題:
插件開發經驗之安全風險.避免審核駁回
[打印本頁]
作者:
我是小站長
時間:
2019-6-1 20:11
標題:
插件開發經驗之安全風險.避免審核駁回
交流探討應是好事,但有些重復問題老是不斷的問,弄的我都煩了。為此,整理一些開發者Q友常見的問題,在此一并回答如下:
常有開發者的作品因數據庫SUID(SELECT、UPDATE、INSERT、DELETE)的操作涉及安全風險而無法審核通過,可又一時搞不清所說的“安全風險”到底是哪些代碼,不知所措。我來講解一下,希望能有所幫助(當初我也經常遇到這類問題,隨著經驗積累,慢慢有所悟了)。
此類“安全風險”,一般是指對$_GET和$_POST有沒有進行安全過濾處理(addslashes)。
搞清這個概念,問題就好解決了。舉個自定義C::t方法的例子
$name = $_GET['name'];//從地址欄或表單獲取
$query = C::t('#mp#common_member')->fetch_by_username($name);
這里用了$_GET,由于該值將用于數據庫操作,那么該值是否安全呢?
我們來看DZ的技術文庫是怎么說的,經查"Discuz! X2.5新版架構優化說明"—>"程序底層架構"—>"function_core.php 減肥之術"—>"用戶輸入數據的處理"中,有兩句話是這樣說的:
$_GET和$_POST的值默認不做addslashes處理;
$_GET為$_GET和$_POST數組的合并,代碼中統一使用$_GET取值;
顯然,上面參與數據庫操作的$name變量是不安全的。但事實真這樣嗎?
下面看看與之相關自定義的C::T方法是怎么寫的吧。
------------------------
……
public fetch_by_username($name){
return DB::result_first('select * from %t where username=%s',array($this->_table,$name));
}
……
通過上面的代碼,需要明白兩件事:
①該方法調用了DB層封裝的函數result_first;
②使用了%s對數組第二參數$name進行格式化處理;
對于①,我們再看DZ的技術文庫,經查"Discuz! X2.5新版架構優化說明"—>"數據庫DB層"—>"新增數據層:數據層的規范和約定"中,有句話是這樣說的:
"DB層封裝的函數實現了addslashes,個別直接寫sql語句的需主意addslashes;"
通過查看source/discuz/discuz_database.php,我們可以找到該類定義的result_first方法,說明該方法是被封裝在DB里的,所以基本確定$name是安全的。
至于為啥要查看discuz_database.php,而不是discuz_table.php,自己慢慢上下求索吧。
對于②,我們再看DZ的技術文庫,經查"Discuz! X2.5新版架構優化說明"—>"數據庫DB層"—>"原DB類的改進"—>"3、SQL語句format的支持"中,可以看到支持的格式化表,其中%s表示進行addslashes安全過濾處理。至此,我們可以完全確定上面的代碼是安全可靠的了。
但是如果我將自定義函數修改如下:
……
public fetch_by_username($name){
return DB::result_first('select * from %t where username=%i',array($this->_table,$name));
}
……
public fetch_by_username($name){
return DB::query('select * from '.DB::table('xxx').' where username='.$name);
}
……
會怎樣呢?留給大家思考。
------------------------
再看一個例子:
$query = DB::query('select * from '.DB::table('xxx').' where username='.$_GET['name']);
雖然DB封裝了query函數,但該函數并未進行addslashes處理,而只是檢驗SQL語句里的每一個字符,嚴格的講是不安全的。
另外,DZ的技術文庫—>"Discuz! X2.5新版架構優化說明"—>"數據庫DB層"—>"新增數據層:數據層的規范和約定"中規定:"不能使用$_G、$POST、$GET等全局變量;"
其實,除了不能使用規定的三個全局變量外,$_REQUEST變量也不應該在SQL中使用!
那么,凡是$_GET都要進行add...處理嗎?不一定,要看用在什么地方,一般來講,參與數據庫SUID操作的DB::query中都要進行處理。例如:
$name = addslashes($_GET['name']);
$query = DB::query('select * from '.DB::table('xxx').' where username='.$name);
但要注意避免重復過濾,如
$name = addslashes($_GET['name']);
$query = DB::query('select * from '.DB::table('xxx').' where username='.addslashes($name));
綜上:
1、使用C::t方法的,要注意相關參數是否用%s進行了格式化
2、無論是否C::t方法,使用DB::query(...)的,必須進行add...處理
3、避免重復過濾
4、盡量避免在SQL中使用禁用的全局變量,因為有時獲取的變量值有違初衷,不是想要的結果
5、建議使用C::t方法
6、盡量了解、熟知、掌握DZ技術文庫
7、盡量了解、熟知、掌握discuz_database.php、discuz_table.php等文件內容
有同行曾問我,為啥X2.5以后不再支持$_G['gp_xx'],我也不知道,這個要問官方。但既然不支持,最好就不要用,否則你還得寫個說明,告知用戶開啟兼容的方法,這不是給自己找麻煩嘛。
還有同行問我,C::t方法有啥好處?我認為好處就是對象清楚、對SQL進行了格式化處理、降低了安全風險,并且有利于維護。
也有一些用戶問我為啥不再開發X2的插件了,這個很簡單,DZ的技術文庫—>"Discuz! X2.5新版架構優化說明"—>"程序底層架構"—>"function_core.php 減肥之術"—>"用戶輸入數據的處理"中,第一句話是這樣說的:"Discus! X2.5之前版本對$_GET和$_POST的值默認是進行addslashes處理,函數在使用此值時信任外部數據的安全性,但這樣處理的弊端是容易生產二次注射的漏洞,為了防止此類漏洞的產生,函數必須不信任任何數據外部數據的安全性"。因此,我對X2及以前的版本安全性是不信任的,出于對用戶負責,所以不再開發X2的插件了。
另外,忠告開發者,尤其是新手,要想提高插件審核通過率,應做到以下幾點:
①養成良好規范的代碼書寫習慣,可讀性強。那種一大堆亂碼似的代碼,人見人煩
②從審核者的角度著想,該注釋的地方加注釋,便于審核者理解此處用意,避免引起誤解而被踢回。與人方便與己方便
③清理垃圾文件和代碼,讓審核者省時省力,提高審核進度。只有好處沒有壞處
④沒事就多看看“開發文檔”,尤其是“Discuz! 應用中心應用審核規范”,避免違規。否則,遭罪的是自己
以上是個人經歷及經驗之談,有不當之處請指正。
本篇屬教程類,希望版主能移動到“插件教程”子版塊中。
歡迎光臨 Discuz! 官方交流社區 (http://www.9999xn.com/)
Powered by Discuz! X5.0
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
国产欧美一区二区视频
|
日韩电影一区二区三区四区
|
精品日韩成人av
|
午夜欧美电影在线观看
|
欧美精品91
|
欧美电影免费提供在线观看
|
日韩av中文在线观看
|
亚洲日本欧美在线
|
久久网这里都是精品
|
国产精品一区二区久久不卡
|
色素色在线综合
|
亚洲特级片在线
|
99久久99久久精品国产片果冻
|
国产亚洲va综合人人澡精品
|
欧美xxxxx裸体时装秀
|
日韩精品1区2区3区
|
一区二区三区国产盗摄
|
国产亚洲一区字幕
|
国产成人av电影在线
|
欧美色视频一区
|
亚洲一区二区综合
|
在线国产精品一区
|
国产精品区一区二区三
|
99精品视频免费在线观看
|
欧美性猛片xxxx免费看久爱
|
午夜激情久久久
|
国产日韩久久
|
国产精品青草综合久久久久99
|
av一二三不卡影片
|
日韩欧美中文字幕精品
|
国产乱码字幕精品高清av
|
免费看的黄色欧美网站
|
亚洲欧美日韩中文字幕一区二区三区
|
欧美日韩精品免费观看视频完整
|
2021国产精品久久精品
|
成人av动漫在线
|
欧美一级免费观看
|
国产在线视视频有精品
|
欧洲视频一区二区
|
麻豆成人免费电影
|
欧美午夜电影一区
|
久久精品99国产国产精
|
色综合久久久久综合99
|
亚洲一二三级电影
|
一区二区日韩免费看
|
亚洲最大成人综合
|
一本色道久久综合亚洲精品不卡
|
亚洲欧美成人一区二区三区
|
亚洲国产美女
|
亚洲男人电影天堂
|
亚洲免费观看
|
亚洲高清中文字幕
|
色婷婷av一区
|
男女视频一区二区
|
欧美日韩亚洲综合一区二区三区
|
麻豆成人免费电影
|
69堂成人精品免费视频
|
国产精品12区
|
精品裸体舞一区二区三区
|
成人深夜福利app
|
精品国产3级a
|
欧美高清一区
|
国产精品国产三级国产有无不卡
|
在线观看亚洲视频啊啊啊啊
|
亚洲一区二区三区自拍
|
国产毛片一区
|
偷拍一区二区三区
|
精品视频1区2区
|
国产乱码一区二区三区
|
www国产成人免费观看视频 深夜成人网
|
91免费视频大全
|
亚洲欧美视频在线观看视频
|
亚洲一区二区高清视频
|
午夜影院在线观看欧美
|
欧美午夜精品久久久久久超碰
|
极品销魂美女一区二区三区
|
在线播放视频一区
|
成人av综合一区
|
欧美激情中文字幕一区二区
|
亚洲经典自拍
|
午夜精品视频在线观看
|
在线看不卡av
|
国产成人精品免费看
|
日韩免费在线观看
|
国产一区再线
|
午夜伊人狠狠久久
|
欧美老女人第四色
|
99久久99久久精品国产片果冻
|
中文无字幕一区二区三区
|
亚洲激情网站
|
三级成人在线视频
|
欧美一区二区在线视频
|
99久久久久久99
|
亚洲欧洲韩国日本视频
|
91福利精品视频
|
av一本久道久久综合久久鬼色
|
...中文天堂在线一区
|
每日更新成人在线视频
|
久久99精品国产
|
久久精品在线免费观看
|
亚洲精品三级
|
日韩电影网1区2区
|
快she精品国产999
|
国产成人自拍在线
|
国产精品毛片大码女人
|
鲁大师影院一区二区三区
|
国产一区二区在线观看免费
|
亚洲码国产岛国毛片在线
|
精品视频色一区
|
午夜精品国产
|
日韩电影在线一区二区三区
|
日韩欧美一区二区视频
|
欧美aⅴ99久久黑人专区
|
亚洲狠狠爱一区二区三区
|
日韩视频免费观看高清完整版
|
亚洲片区在线
|
成人免费视频免费观看
|
亚洲二区在线观看
|
精品国产成人在线影院
|
在线一区二区视频
|
狠狠色狠狠色综合日日tαg
|
国产在线一区观看
|
亚洲大片免费看
|
中文字幕欧美激情一区
|
88在线观看91蜜桃国自产
|
亚洲少妇在线
|
欧美一区亚洲二区
|
国内精品国产三级国产a久久
|
亚洲影视在线播放
|
久久久影院官网
|
久久久久久九九九九
|
亚洲国产成人不卡
|
91丝袜美女网
|
国内欧美视频一区二区
|
舔着乳尖日韩一区
|
一区二区中文视频
|
精品免费一区二区三区
|
欧美日韩一区视频
|
免费视频久久
|
亚洲第一在线
|
99精品视频在线播放观看
|
日韩av电影免费观看高清完整版
|
国产精品a久久久久
|
另类成人小视频在线
|
国产精品三级视频
|
欧美有码视频
|
麻豆91免费观看
|
午夜欧美一区二区三区在线播放
|
久久久久久久久久久久久女国产乱
|
成人性视频网站
|
毛片av一区二区
|
中文字幕在线不卡视频
|
欧美日韩高清一区二区不卡
|
95精品视频在线
|
日本不卡一区二区三区
|
国内一区二区三区在线视频
|
精品一区二区三区免费视频
|
国产精品久久福利
|
欧美日本精品一区二区三区
|
99精品热视频
|
另类欧美日韩国产在线
|
中文字幕久久午夜不卡
|
欧美日韩一区久久
|
亚洲清纯自拍
|
97se亚洲国产综合自在线不卡
|
麻豆精品在线播放
|
亚洲成人免费在线
|
国产精品麻豆欧美日韩ww
|
日韩欧美视频在线
|
欧美天天综合网
|
一本久久综合
|
亚洲精品影院
|
色综合天天综合网天天狠天天
|
黄页视频在线91
|
亚洲国产婷婷综合在线精品
|
欧美成人乱码一区二区三区
|
色av综合在线
|
在线欧美一区二区
|
国产精品伊人日日
|
黄色精品一区
|
91色视频在线
|
国内成人自拍视频
|
日韩和欧美一区二区
|
亚洲美女视频在线观看
|
日本一二三四高清不卡
|
91久久精品一区二区三区
|
在线视频一区观看
|
欧美日韩免费
|
99视频热这里只有精品免费
|
国产乱一区二区
|
亚洲.国产.中文慕字在线
|
亚洲视频一区二区在线观看
|
国产三级精品三级
|
日韩精品一区二区三区中文不卡
|
国产精品毛片一区二区三区
|
黄色国产精品一区二区三区
|
亚洲高清免费一级二级三级
|
亚洲视频资源在线
|
亚洲免费av高清
|
亚洲欧美激情小说另类
|