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

返回列表 發帖
查看: 6317|回復: 0

插件開發經驗之安全風險.避免審核駁回

83

主題

-6

回帖

329

積分

爐火純青

貢獻
2 點
金幣
241 個
樓主
發表于 2019-6-1 20:11:18 | 只看樓主 |倒序瀏覽 |閱讀模式

交流探討應是好事,但有些重復問題老是不斷的問,弄的我都煩了。為此,整理一些開發者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! 應用中心應用審核規范”,避免違規。否則,遭罪的是自己
以上是個人經歷及經驗之談,有不當之處請指正。

本篇屬教程類,希望版主能移動到“插件教程”子版塊中。

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

  • 關注公眾號
  • 有償服務微信
  • 有償服務QQ

手機版|小黑屋|Discuz! 官方交流社區 ( 皖ICP備16010102號 |皖公網安備34010302002376號 )|網站地圖|star

GMT+8, 2025-10-20 09:44 , Processed in 0.050038 second(s), 10 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

關燈 在本版發帖
有償服務QQ
有償服務微信
返回頂部
快速回復 返回頂部 返回列表
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
久久久久9999亚洲精品| 久久久久久久久岛国免费| 久久先锋影音av鲁色资源网| 美女脱光内衣内裤视频久久网站 | 精品国产成人在线影院| 首页国产欧美久久| 亚洲天堂男人| 欧美精品一区二区三区很污很色的 | 亚洲精品中文字幕在线| 欧美极品xxx| 97精品久久久午夜一区二区三区 | 欧美亚洲不卡| 欧美日韩精品欧美日韩精品一 | 亚洲成av人片| 亚洲东热激情| 国产精品福利一区| 午夜精品偷拍| 国产亚洲女人久久久久毛片| 成人免费视频免费观看| 日韩一区二区视频在线观看| 国产精品亚洲午夜一区二区三区| 伊人激情综合| 久久久精品蜜桃| aaa亚洲精品| 久久蜜桃一区二区| 97精品国产97久久久久久久久久久久| 久久国产一区二区| 亚洲综合精品久久| 久久亚洲电影| 欧美a级理论片| 在线视频国产一区| 美女视频黄 久久| 色婷婷久久久综合中文字幕| 日韩高清在线电影| 欧美亚洲图片小说| 黑人精品欧美一区二区蜜桃 | 精品国产污网站| 国产精品一二三四区| 91精品国产欧美日韩| 成人黄色国产精品网站大全在线免费观看| 香蕉成人久久| 石原莉奈在线亚洲三区| 欧美性三三影院| 国产成人综合在线播放| 精品美女一区二区三区| av成人动漫在线观看| 国产精品国产三级国产普通话蜜臀 | 精品少妇一区二区三区在线播放| 日本欧美一区二区| 欧美精品乱码久久久久久按摩| 樱花草国产18久久久久| 99精品视频免费观看| 视频一区视频二区在线观看| 欧美性生活影院| 成人黄色国产精品网站大全在线免费观看 | 99久久国产综合精品麻豆| 久久嫩草精品久久久精品| 国产一区再线| 中文字幕在线不卡一区二区三区| 不卡一区中文字幕| 国产午夜精品一区二区三区视频| 国产综合色产在线精品| 欧美日韩电影一区| 99久久综合狠狠综合久久| 综合久久给合久久狠狠狠97色| 欧美成人69av| 樱桃视频在线观看一区| 欧美性xxxxxxxx| 99久久综合色| 一区二区三区四区激情| 欧美三区免费完整视频在线观看| 亚洲国产欧美日韩另类综合| 久久亚洲欧洲| 国产露脸91国语对白| 国产婷婷一区二区| 亚洲色诱最新| 狠狠v欧美v日韩v亚洲ⅴ| 国产午夜精品理论片a级大结局| 成人午夜免费电影| 亚洲国产成人自拍| 免播放器亚洲| 大胆亚洲人体视频| 一区二区中文视频| 久久一综合视频| 成人国产精品免费网站| 亚洲最大的成人av| 欧美一卡二卡在线观看| 黄色工厂这里只有精品| 婷婷丁香激情综合| 精品国产伦理网| 欧美亚洲免费| 成人av在线一区二区| 亚洲午夜久久久久久久久电影网 | 成人黄色国产精品网站大全在线免费观看| 在线一区二区观看| 99国产一区二区三精品乱码| 亚洲国产视频一区二区| 精品国产区一区| 蜜桃久久精品乱码一区二区| 91免费看片在线观看| 亚洲国产日韩一区二区| 精品国产第一区二区三区观看体验| 91香蕉视频在线| 一区二区三区精品视频在线| 亚洲视频播放| 成人免费视频caoporn| 国产农村妇女精品| 欧美成人性战久久| 国产精品一二三在| 亚洲高清在线| 亚洲h动漫在线| 精品国产凹凸成av人导航| 国产精品一区二区a| 成人午夜碰碰视频| 久久久久久穴| 99国产精品久久| 午夜精品久久久久久久久久久| 欧美一区二视频在线免费观看| 日韩精品一区二区在线观看| 国产精品一区二区三区观看| 不卡av免费在线观看| 日韩制服丝袜av| 国产精品久久久久久久久快鸭| 床上的激情91.| 一二三四区精品视频| 精品剧情在线观看| 午夜亚洲视频| 欧美日韩喷水| 国产高清无密码一区二区三区| 91精品国产综合久久精品| 99亚洲伊人久久精品影院红桃| 亚洲丝袜另类动漫二区| 91麻豆精品国产91久久久资源速度 | 三级久久三级久久| 欧美日韩精品高清| 亚洲国产日本| 99re视频精品| 国产盗摄视频一区二区三区| 亚洲超碰97人人做人人爱| 国产精品精品国产色婷婷| 久久亚洲捆绑美女| 欧美精选在线播放| 日本精品一级二级| 国产日韩综合| 欧美96在线丨欧| 成人福利视频在线看| 狠狠色丁香久久婷婷综合丁香| 欧美国产欧美综合| 欧美精品色一区二区三区| 午夜在线精品| 日韩亚洲视频在线| 午夜精品一区二区在线观看| 国产福利一区二区三区在线视频| 久久久99久久| 91精品在线免费| 在线影院国内精品| 欧美专区18| 国产欧美一区二区三区另类精品 | 欧美丰满高潮xxxx喷水动漫| 免费日韩视频| av电影在线观看一区| 捆绑调教美女网站视频一区| 香蕉乱码成人久久天堂爱免费| 欧美影视一区在线| 一区二区免费在线视频| 激情丁香综合| 欧美午夜在线| 国产精品va| 国产精品二区影院| 欧美日本不卡高清| 女同性一区二区三区人了人一| 午夜国产不卡在线观看视频| 亚洲欧洲成人自拍| 中文字幕成人在线观看| 久久综合久久99| 精品国产99国产精品| 91麻豆精品国产自产在线观看一区 | 欧美日本一区二区高清播放视频| 99视频日韩| 国产成人免费视频网站高清观看视频| 中文欧美字幕免费| 日韩亚洲欧美成人一区| 欧美日产在线观看| 欧美喷潮久久久xxxxx| 51精品国自产在线| 日韩欧美在线不卡| 国产精品久久三| 1024成人网| 一区二区在线观看视频| 亚洲精品福利视频网站| 亚洲成年人网站在线观看| 天天影视涩香欲综合网 | ㊣最新国产の精品bt伙计久久| 欧美曰成人黄网| 在线视频欧美精品| 欧美日韩你懂得| 欧美一二三四在线| 久久亚洲精精品中文字幕早川悠里 | www.日韩大片| 91一区在线观看|