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

Discuz! 官方交流社區

標題: Discuz!基礎的代碼安全和代碼規范 [打印本頁]

作者: 我是小站長    時間: 2019-6-3 13:24
標題: Discuz!基礎的代碼安全和代碼規范

變量
所有漏洞都來源于變量,因此變量首先要做的就是定義初始化。用任何一個變量前一定要先定義,初始化它
雖然現在Discuz!X來說,GPC不會被全局覆蓋了,但是大家寫插件的過程中也不要忽視了
因為在服務器php.ini的配置中 global on 時
所有的GET POST 都會變成變量
$_GET['xxx']  如果存在
就會變成 $xxx 而產生在程序里
因此,你自己要用的變量,一定要初始化

第一點,變量的初始化
無論你要怎么利用變量,一定要初始化
不管是Discuz!還是Discuz!X
由于PHP的歷史原因
你不能相信任何一個服務器
只因為php有個global on 的參數
他會讓GPC變量直接變成全局變量
因此,你自己的變量一定要初始化

第二點,認清變量的類型
整剛才說到,變量一定要初始化,那么初始化成什么類型
如果你要用于數組

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

這樣子,這里說說數組,這里又存在一個php歷史問題,這歷史延續至今。

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

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

舉例
echo $s[2];
簡單這一句,你認為這是輸出數組的一個項,還是字串?
大多數人會認為這明顯是輸出數組的一個項目,但是剛才也看到了,它輸出字串的一個字節也可以。
那,我們反過來思考,如果程序的某邏輯需要輸出字串的某字節,但是,如果你沒明確告知變量類型。那么有可能會讓這一個字節變成一個字串 xxx.php?s[2]=hello

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

第三點、不要相信任何一個即將入庫的變量
進很多SQL注入都是從變量開始,要仔細看每一個SQL語句中可能出現的變量,如,整數一定要intval;字串一定要addslashes處理,說到addslashes,說說Discuz!的特點,國外某些論壇是,所有變量都無需addslashes,addslashes只在SQL數據庫類中統一處理,但Discuz!不是,Discuz!會統一給GPC變量自動addslashes。

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

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

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

我舉例子
沒錯,單引號封閉,無論你是什么類型的字段
在Discuz!的規范里,必須都加單引號
select * from table where id='$id'
WHERE后面的所有條件
變量必須加單引號,這是規范。也許你少加一個,并不會產生漏洞,也只是也許。

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

數字類型
大家都知道intval,字串是htmlspecialchars,當然,后臺無所謂!后臺比較安全,但是,最好也有,一個習慣,僅作參考。

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

這樣,入庫的時候sql查詢語句里應該都是_ad結尾的
html模版中的應該都是_en結尾的
我說不出很多黑客的那些漏洞屬于
但是剛才說的那些如果都做到了,代碼安全不成問題

然后說說Discuz!內置的一些變量

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

第四點,下面簡單說說代碼規范
大家閱讀代碼的時候也許都看到了
$a = 1;
賦值語句前后空格
if(.........
if后面沒空格,這些細節涉及不到安全,但有一點,這些也有安全影響?

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

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

$giftunit = $remaining
沒引號,而且大小寫不明,閱讀起來很累,規范的不規范的寫在一起
雖然站長,不會看代碼。但是,一個漂亮代碼文檔,就像一篇好作文。

有一個SQL上的細節 notifications=notifications+1
這種SQL語句,理論上我們不推薦,雖然這么寫本身是正確的
如果a字段是unsigned類型,那么會產生數暴增
產生溢出

a=a+'-1'
就不會

mysql好奇怪的
這點大家通過pma試試就知道了

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

下面說最后一點
涉及安全的,代碼的流程,你的程序,如果只在你的流程下運作
允許100、1000次也許都不會出錯。但是,在別人那里,不一定

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

沒錯,是,你自己調試的時候,這數組肯定有
但是在用戶那里,有可能就沒了
這時候,這語句有錯

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

類似影響流程的不僅僅是foreach
如rawurlencode
echo rawurlencode('sss');
誰都知沒問題
但!!回到剛才我曾說過的,認清變量類型
echo rawurlencode(array('11'));

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

用php的每一個函數的時候都要看清接受參數的類型
如果是字串,切記剛才說的
php很傻,有時候字串、數組不分
這是最后一點,爆路徑,爆路徑后能干啥,黑客最清楚

作者: 耗子    時間: 2019-6-7 23:01
收藏了~~  下次開發插件前注重以下
作者: xzaxza    時間: 2019-6-9 08:38
感謝分享,
作者: ssbaoer89    時間: 2019-8-9 10:38
本帖最后由 ssbaoer89 于 2019-8-9 10:40 編輯

機會是留給

作者: jiangchuankyo    時間: 2019-8-9 11:56
還有很多歷史原因遺留的嚴重BUG,
php的正則匹配中小數點.即使你后面沒有加/s也是包括\r這個換行符的(網絡上所有的教程說法都是錯誤誤導的),

還有PHP_EOL這個常量千萬不能用,因為它在windows下等同于\r\n,linux下等同于\n, 比如現在是windows寫入和讀取后分割都是用\r\n確實沒有問題, 但如果你以后服務器換到了linux的話分割用PHP_EOL \n那么以前在windows時寫入的數據分割后后面全部會平白無故多一個\r出來,長度完全就不對了




歡迎光臨 Discuz! 官方交流社區 (http://m.9999xn.com/) Powered by Discuz! X5.0
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
裸体素人女欧美日韩| 成人一区二区三区视频在线观看 | 99re热精品| 色综合天天综合网天天看片| www国产精品av| 日韩欧美视频在线| 欧美日韩的一区二区| 免费成人性网站| 不卡的电影网站| 久久色中文字幕| 尤物在线精品| 另类小说视频一区二区| 91精品国产综合久久精品图片| 成人av网站在线观看免费| 亚洲欧美激情小说另类| 色综合 综合色| 99久久精品免费看国产| 亚洲国产裸拍裸体视频在线观看乱了| 欧美男人的天堂一二区| 欧美一区激情| 美女国产一区二区| 日韩午夜中文字幕| 久久久久国产精品一区三寸 | 狠狠色2019综合网| 99国产精品国产精品毛片| 日本丶国产丶欧美色综合| 在线观看亚洲视频啊啊啊啊| 亚洲裸体在线观看| 六月丁香综合| 韩国成人福利片在线播放| 国产精品久久久久毛片软件| 亚洲国产一区二区三区青草影视| 91麻豆精品国产自产在线观看一区 | 综合久久国产九一剧情麻豆| 国产清纯白嫩初高生在线观看91 | 国产精品对白交换视频 | 欧美视频网站| 91免费小视频| 欧美精品在线观看播放| 国产精品女同互慰在线看| 久久一区二区三区四区五区 | 欧美日韩亚洲综合在线| 欧美变态口味重另类| 亚洲视频网在线直播| 美美哒免费高清在线观看视频一区二区| 国产精品亚洲综合一区在线观看| 欧美二区在线| 在线观看av一区| 国产色产综合色产在线视频| 亚洲午夜一二三区视频| 精油按摩中文字幕久久| 亚洲国产日日夜夜| 国产一区在线精品| 欧美三级在线视频| 色吧成人激情小说| 欧美日韩和欧美的一区二区| 在线视频亚洲一区| 91.xcao| 成人深夜在线观看| av成人老司机| 亚洲区一区二| 制服丝袜一区二区三区| 色呦呦网站一区| www国产精品av| 日韩高清一区二区| 亚洲一级特黄| 日韩午夜av一区| 日韩精品免费专区| 国产中文一区二区| 国产专区欧美精品| 国产不卡在线一区| 欧美日韩在线不卡一区| 麻豆视频观看网址久久| 高清shemale亚洲人妖| 亚洲精品综合| 欧美久久免费观看| 亚洲美女视频在线| 国产麻豆视频精品| 亚洲自啪免费| 久久久久国产精品人| 快she精品国产999| 激情欧美日韩| 久久久美女艺术照精彩视频福利播放| 艳妇臀荡乳欲伦亚洲一区| 国产精品888| 777精品伊人久久久久大香线蕉| 日本美女一区二区| 亚洲欧美日韩精品久久久| 国产在线欧美日韩| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲男女自偷自拍| 国产精品亲子伦对白| 色婷婷综合激情| 久久不射2019中文字幕| 国产亚洲欧美中文| 国模冰冰炮一区二区| 在线一区二区观看| 天天操天天干天天综合网| 国产精品综合色区在线观看| 中文字幕一区日韩精品欧美| 欧美连裤袜在线视频| 久久午夜国产精品| 农村妇女精品| 国产日韩欧美麻豆| 欧美日韩系列| 久久久国产精品不卡| 每日更新成人在线视频| 夜夜揉揉日日人人青青一国产精品| 欧美全黄视频| 最新国产の精品合集bt伙计| 在线视频精品| 国产欧美日韩在线视频| 亚洲国产一区二区三区在线播| 日韩精品中午字幕| 亚洲调教视频在线观看| 欧美午夜电影一区| 国产成人免费高清| 97久久超碰精品国产| 国产精品成人在线观看| 黄色亚洲在线| 欧美日韩国产系列| 亚洲乱码一区二区三区在线观看| 亚洲国产一区二区精品专区| 亚洲影院免费观看| 裸体素人女欧美日韩| 日韩三级视频在线观看| 成人免费视频播放| 亚洲欧洲日韩av| 欧美一区二区三区四区五区 | 色综合久久久久综合体桃花网| 日韩国产精品91| 久久夜色精品| 94-欧美-setu| 欧美三级乱码| 日韩午夜av电影| 国产精品v欧美精品v日韩| 国产盗摄视频一区二区三区| 91麻豆精品国产91久久久久| 91色在线porny| 亚洲综合小说图片| 欧美一区二区三区在| 欧美在线资源| 午夜精品123| 精品国产乱码久久久久久久久| 国自产拍偷拍福利精品免费一| 午夜精品aaa| 久久久噜噜噜久久人人看 | 久久综合色婷婷| 国产毛片久久| 成a人片亚洲日本久久| 国产精品麻豆久久久| 91久久精品国产91性色tv| av在线一区二区三区| 亚洲成av人在线观看| 欧美一级二级三级乱码| 一本一本久久a久久精品综合妖精| 狠狠色狠狠色综合| 一区二区亚洲精品| 国产一区日韩一区| 午夜日韩在线| 黄色av日韩| 伊人久久亚洲美女图片| 色综合久久天天综合网| 美女亚洲精品| 日韩三级精品电影久久久| 日韩精品在线看片z| 精品国产sm最大网站| 精品人伦一区二区色婷婷| 久久久精品日韩欧美| 中文字幕成人网| 亚洲日本免费电影| 性欧美大战久久久久久久久| 日本在线播放一区二区三区| 韩国一区二区三区| 91美女在线看| 一区二区三区成人精品| 欧美日韩一级视频| 夜夜精品浪潮av一区二区三区| 国产精品自拍毛片| 精品中文字幕一区二区| 国产精品911| 亚洲国产一区二区三区a毛片| 国产精品日韩精品欧美精品| 亚洲男女一区二区三区| 欧美酷刑日本凌虐凌虐| 欧美午夜在线视频| 国产一区二区三区电影在线观看 | 日韩不卡一二三区| 亚洲色图一区二区| 国产午夜精品久久| 337p粉嫩大胆噜噜噜噜噜91av | 日韩女同互慰一区二区| 国产精品拍天天在线| 7777女厕盗摄久久久| 久久综合久久综合久久| 亚洲三级电影网站| 91蜜桃视频在线| 久久久蜜桃精品| 丰满少妇在线播放bd日韩电影| 欧美日韩一本到|