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

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

[已解決] 無私分享,discuz僅需微小改動即可防范黑客暴力刷接口

1

主題

2

回帖

3

積分

初學乍練

貢獻
0 點
金幣
0 個
樓主
發(fā)表于 2025-8-20 09:24:30 | 只看樓主 |正序瀏覽 |閱讀模式

無私分享,discuz僅需微小改動即可防范黑客暴力刷接口
  • 引言
  • 天降飛鍋
  • 攻防階段1:封IP
  • 攻防階段2:關入口
  • 攻防階段3:調(diào)整驗證方式
  • 攻防階段4:升級驗證方式
引言

最近處理了一起針對開源社區(qū)的攻擊行為,對方疑似動用黑產(chǎn)勢力,連續(xù)幾天發(fā)動境內(nèi)外的肉雞IP發(fā)起大量注冊用戶請求,當然了,并不是真正的要注冊用戶,而是利用注冊用戶的動作,把短信驗證碼額度刷爆,最瘋狂的那天刷了一萬多條驗證短信,真是喪心病狂。

面對這些壞蛋,我們當然不能坐以待斃,經(jīng)過幾次攻防交手,暫時是我們?nèi)〉眯佟?/font>

本文分享這次的攻防經(jīng)過,希望對其他使用Discuz系統(tǒng)的朋友能有所幫助。

天降飛鍋

某天,突然收到短信運營商告警,在一天內(nèi)被刷掉一萬多條短信驗證碼,這顯然有問題,如果這些都是真實注冊請求的話,那我肯定超級開心,可惜并不是。


                               
登錄/注冊后可看大圖
攻防階段1:封IP

經(jīng)過對訪問日志的分析,發(fā)現(xiàn)短時間內(nèi)有大量的境外IP請求用戶注冊接口,很快就把每天的短信驗證碼額度耗盡,導致正常的用戶注冊和登錄請求無法使用。

對于這種情況,第一時間想到的是封禁這些IP,把它們加到路由黑洞(/sbin/ip route add blackhole $IP)中,這樣做比用IPTABLE加防火墻規(guī)則效率更高,對服務器的性能損耗更小,而且不會給攻擊者回包,反過來影響其效率。

不過,這些專業(yè)的黑產(chǎn)勢力,顯然是有充足的肉雞資源,直接封IP的做法效果有限,還是無法阻止它們的攻擊。

攻防階段2:關入口

黑產(chǎn)勢力實在太猖狂,除了封IP外,暫時還沒找到更好的辦法,只能先避其鋒芒,我惹不起還是躲得起的。因此決定暫時先關閉注冊入口,以及短信驗證碼方式登錄,只保留密碼登錄功能。

在Discuz管理后臺關閉注冊入口,如下圖所示:


                               
登錄/注冊后可看大圖

調(diào)整完后,黑產(chǎn)的請求量大概下降了一半,不過這招相當于是殺敵一千,自損八百,用戶的有些功能受限了,不是長久之計。

攻防階段3:調(diào)整驗證方式

在敵人的攻勢減弱后,就有更多時間思考和嘗試其他各種御敵之策了。

相對最優(yōu)的解決辦法是修改注冊和登錄方式,只允許通過微信掃碼以及gitee/github等SSO單點登錄方式,不過這需要額外功能開發(fā),也就是要另外付費,先作為備選方案吧,你懂得的。

在管理后臺反復查看后,就試著修改驗證方式,把原來的的“英文圖片驗證碼”修改為“位圖驗證碼”,肉眼看起來識別難度高一丟丟,不過事實證明,對于黑產(chǎn)來說,這不是事,應該是有方法可以直接破解的,因為它們的請求量并沒明顯下降。

在Discuz管理后臺修改驗證碼設置:


                               
登錄/注冊后可看大圖

修改前后驗證碼圖片對比:


                               
登錄/注冊后可看大圖
攻防階段4:升級驗證方式

再次研究Discuz系統(tǒng)管理后臺,發(fā)現(xiàn)它的驗證方式,除了驗證碼,還支持提問時互動驗證,默認支持100以內(nèi)的加減法問題交互驗證。

在管理后臺啟用該功能:


                               
登錄/注冊后可看大圖

啟用后效果如下圖所示:


                               
登錄/注冊后可看大圖

出人意料的是,啟用該功能后,防護效果非常好,幾乎所有的惡意請求都失效了,雖然還能發(fā)起注冊接口請求,但已經(jīng)無法正確識別互動問題驗證碼,也就沒辦法再把驗證短信額度給刷爆了。完美!

值得表揚的是,該功能還支持自定義互動問題,這就給了我們極大發(fā)揮空間,我干脆把部分GreatSQL GCP認證考試題作為互動問題加進來。這樣一來,不但可以防范黑勢力刷接口,還可以讓正常的社區(qū)用戶順便當做GCP考試練習,一舉多得。

美中不足的時,這個功能只支持針對 新用戶注冊、發(fā)帖、修改密碼這三個動作生效,不支持 用戶登錄(尤其是短信登錄)、忘記密碼這兩個動作,還不能全面防住,還需要進一步想辦法。


                               
登錄/注冊后可看大圖

經(jīng)過一番艱難的摸索測試,最終發(fā)現(xiàn)只需要對Discuz源碼中的模板文件做非常小的修改即可實現(xiàn)。

1、修改模板文件 common/seccheck.htm,刪除原文件中第5、8行的條件判斷

  1 {eval
  2         $sechash = !isset($sechash) ? 'S'.($_G['inajax'] ? 'A'.random(3) : '').$_G['sid'] : $sechash.random(3);
  3         $sectpl = str_replace("'", "\'", $sectpl);
  4 }
  5 <!--{if $secqaacheck}-->
  6                 <span id="secqaa_q$sechash"></span>
  7                 <script type="text/javascript" reload="1">updatesecqaa('q$sechash', '$sectpl', '{$_G[basescript]}::{CURMODULE}');</script>
  8 <!--{/if}-->
  9 <!--{if $seccodecheck}-->
10                 <span id="seccode_c$sechash"></span>
11                 <script type="text/javascript" reload="1">updateseccode('c$sechash', '$sectpl', '{$_G[basescript]}::{CURMODULE}');</script>
12 <!--{/if}-->

也就是,將上述原文件修改為

  1 {eval
  2         $sechash = !isset($sechash) ? 'S'.($_G['inajax'] ? 'A'.random(3) : '').$_G['sid'] : $sechash.random(3);
  3         $sectpl = str_replace("'", "\'", $sectpl);
  4 }
  6                 <span id="secqaa_q$sechash"></span>
  7                 <script type="text/javascript" reload="1">updatesecqaa('q$sechash', '$sectpl', '{$_G[basescript]}::{CURMODULE}');</script>
  9 <!--{if $seccodecheck}-->
10                 <span id="seccode_c$sechash"></span>
11                 <script type="text/javascript" reload="1">updateseccode('c$sechash', '$sectpl', '{$_G[basescript]}::{CURMODULE}');</script>
12 <!--{/if}-->

上述改動的作用是使得 用戶登錄功能也能同時啟用兩種驗證方式。


                               
登錄/注冊后可看大圖

2、修改模板文件 member/login.htm,在第140行附近插入下面的代碼(這里直接展示git diff的結果)

--- a/member/login.htm
+++ b/member/login.htm
@@ -137,6 +137,11 @@
                                 <div class="layui-form-item">
                                     <input type="text" name="phone" lay-verify="required|phone" autocomplete="off" placeholder="手機號" lay-reqtext="請?zhí)顚懯謾C號" class="layui-input phone">
                                 </div>
+                               <!--{if $secqaacheck || $seccodecheck}-->
+                               <!--{block sectpl}--><div class="layui-form-item secode"><i class="layui-hide"><sec>:</i><sec><i class="img_box"><sec></i></div><!--{/block}-->
+                               <!--{subtemplate common/seccheck}-->
+                               <!--{/if}-->
+                                <div class="layui-form-item">^M
                                 <div class="layui-form-item">

上述改動的作用是使得 忘記密碼功能也能同時啟用兩種驗證方式。


                               
登錄/注冊后可看大圖

至此,用戶注冊、用戶登錄、忘記密碼 等多處需要用到短信驗證碼的入口,均已同時啟用兩種驗證方式。

問題暫時得以解決,接下來要繼續(xù)關注黑勢力還有什么新的小動作了。

以上,全文完。

如果對你有幫助的話,還請幫忙動動可愛的小手點贊、轉發(fā)。




原文鏈接:https://mp.weixin.qq.com/s/PNIwKHNKC1IxOFyOyHXGPA
我知道答案 回答被采納將會獲得1 貢獻 已有4人回答
回復

使用道具 舉報

6

主題

142

回帖

180

積分

漸入佳境

貢獻
5 點
金幣
4 個
5#
發(fā)表于 2025-8-23 22:47:31 | 只看Ta
學習一下 !!!
回復

使用道具 舉報

1

主題

2

回帖

3

積分

初學乍練

貢獻
0 點
金幣
0 個
地板
 樓主| 發(fā)表于 2025-8-20 12:51:50 | 只看Ta
葉金榮 發(fā)表于 2025-8-20 10:28
管理后臺中,“驗證問答設置”功能,原先代碼限制了最多只能顯示10個問題,當添加超過10個后,會自動導致10 ...

這里其實還可以修改為下面這樣,實現(xiàn)問答數(shù)量無上限

foreach(C::t('common_secquestion')->fetch_all() as $item) {

此外,其他代碼文件也要同步修改,完整git diff如下

  1. --- a/source/admincp/admincp_setting.php
  2. +++ b/source/admincp/admincp_setting.php
  3. @@ -1793,7 +1793,10 @@ EOT;
  4.                 showsubtitle(array('', 'setting_sec_secqaa_question', 'setting_sec_secqaa_answer'));

  5.                 $qaaext = array();
  6. -               foreach(C::t('common_secquestion')->fetch_all($start_limit, 10) as $item) {
  7. +               foreach(C::t('common_secquestion')->fetch_all() as $item) {


  8. --- a/source/class/helper/helper_seccheck.php
  9. +++ b/source/class/helper/helper_seccheck.php
  10. @@ -107,7 +107,9 @@ class helper_seccheck {
  11.         public static function make_secqaa() {
  12.                 global $_G;
  13.                 loadcache('secqaa');
  14. -               $secqaakey = max(1, random(1, 1));
  15. +               $secqaakey = rand(1, count($_G['cache']['secqaa']));


  16. --- a/source/function/cache/cache_secqaa.php
  17. +++ b/source/function/cache/cache_secqaa.php
  18. @@ -15,19 +15,25 @@ function build_cache_secqaa() {
  19. -       foreach(C::t('common_secquestion')->fetch_all($start_limit, 10) as $secqaa) {
  20. +       foreach(C::t('common_secquestion')->fetch_all() as $secqaa) {
  21.                 if(!$secqaa['type'])  {
  22.                         $secqaa['answer'] = md5($secqaa['answer']);
  23.                 }
  24.                 $data[$i] = $secqaa;
  25.                 $i++;
  26.         }
  27. -       while(($secqaas = count($data)) < 9) {
  28. +       while(($secqaas = count($data)) < $secqaanum) {
復制代碼


歡迎關注我的微信公眾號:老葉茶館
回復

使用道具 舉報

4

主題

48

回帖

59

積分

漸入佳境

貢獻
0 點
金幣
0 個
板凳
發(fā)表于 2025-8-20 11:58:20 | 只看Ta
學習一下~
回復

使用道具 舉報

1

主題

2

回帖

3

積分

初學乍練

貢獻
0 點
金幣
0 個
沙發(fā)
 樓主| 發(fā)表于 2025-8-20 10:28:27 | 只看Ta
管理后臺中,“驗證問答設置”功能,原先代碼限制了最多只能顯示10個問題,當添加超過10個后,會自動導致100以內(nèi)加減法功能失效,只需修改一處代碼即可解決:

修改代碼文件:source/admincp/admincp_setting.php 約1796行附近,git diff結果如下

  1. --- a/source/admincp/admincp_setting.php
  2. +++ b/source/admincp/admincp_setting.php
  3. @@ -1793,7 +1793,9 @@ EOT;
  4.                 showsubtitle(array('', 'setting_sec_secqaa_question', 'setting_sec_secqaa_answer'));

  5.                 $qaaext = array();
  6. -               foreach(C::t('common_secquestion')->fetch_all($start_limit, 10) as $item) {
  7. +               //驗證問題顯式最多支持30個(原先是10個)
  8. +               //同時解決了原先超過10個問題后,100以內(nèi)計算被自動禁用的bug
  9. +               foreach(C::t('common_secquestion')->fetch_all($start_limit, 30) as $item) {
復制代碼
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

GMT+8, 2025-11-18 15:35 , Processed in 0.048650 second(s), 14 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

關燈 在本版發(fā)帖
有償服務QQ
有償服務微信
返回頂部
快速回復 返回頂部 返回列表
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
岛国精品在线观看| 亚洲欧美aⅴ...| 天天影视网天天综合色在线播放| 1024成人| 亚洲视频综合在线| 国内精品久久久久久久影视麻豆| 久久一留热品黄| 99这里只有精品| 国产婷婷色一区二区三区| 亚洲欧美亚洲| 中文字幕五月欧美| 国产精品资源| 日韩av在线播放中文字幕| 欧洲精品一区二区| 老色鬼精品视频在线观看播放| 欧美日韩中文字幕一区| 国产精品1024| 久久伊99综合婷婷久久伊| 午夜精品999| 亚洲另类在线一区| 久久福利毛片| 久久国产欧美日韩精品| 91精品国产麻豆| 91网页版在线| 亚洲欧美日韩小说| 一本色道久久综合狠狠躁的推荐| 久久9热精品视频| 欧美大白屁股肥臀xxxxxx| 91在线观看免费视频| 国产精品的网站| 亚洲欧美视频| 国产综合色视频| 欧美精品一区二| 激情综合中文娱乐网| 午夜精品久久久久久久久| 在线免费不卡视频| 国产成人精品网址| 国产精品免费观看视频| 亚洲在线黄色| 国产在线不卡一卡二卡三卡四卡| 亚洲精品一线二线三线无人区| 韩日成人在线| 偷窥国产亚洲免费视频| 欧美一区二区三区视频免费播放| 欧美国产三区| 亚洲一区二区成人在线观看| 欧美日韩一级大片网址| 99久久99久久综合| 亚洲免费资源在线播放| 欧美日韩精品| 亚洲男人天堂一区| 色婷婷一区二区三区四区| 国产精品一区二区久久不卡| 在线观看欧美黄色| 成人av网站免费| 亚洲蜜桃精久久久久久久| 欧美系列在线观看| 91理论电影在线观看| 亚洲一区二区在线免费观看视频| 欧美精选在线播放| 狠狠色综合网| 久久97超碰色| 中文字幕一区二区三区在线观看 | 午夜天堂影视香蕉久久| 日韩欧美黄色影院| 国产区日韩欧美| 懂色av一区二区三区免费观看| 亚洲精品国产精华液| 日韩一区二区视频在线观看| 在线欧美三区| 国产精品乡下勾搭老头1| 亚洲欧美视频一区| 日韩欧美色电影| 性感少妇一区| 成人国产精品免费网站| 亚洲一区二区三区三| 日韩精品一区二区三区视频在线观看| 国产精品久久久久毛片大屁完整版| 亚洲国产综合视频在线观看| 久久综合色综合88| 在线观看免费一区| 亚洲国产专区校园欧美| 国产91精品精华液一区二区三区 | 色婷婷av一区| 欧美精品aa| 激情综合网激情| 亚洲美女屁股眼交| 欧美第一区第二区| 在线观看三级视频欧美| 一色屋精品视频在线看| 国产白丝精品91爽爽久久| 亚洲午夜电影网| 中文无字幕一区二区三区| 欧美丰满少妇xxxxx高潮对白 | 在线免费观看不卡av| 狠狠综合久久av一区二区老牛| 国产精品一区免费视频| 亚洲国产日韩a在线播放| 久久毛片高清国产| 欧美日韩免费在线视频| 亚洲精品一二| 欧美成人嫩草网站| 国产一区中文字幕| 无吗不卡中文字幕| 中文字幕一区不卡| 久久综合九色欧美综合狠狠| 欧美性色黄大片| 性感少妇一区| 在线观看一区欧美| 91在线精品一区二区三区| 九九精品视频在线看| 亚洲一区二区三区不卡国产欧美| 国产欧美日韩激情| 日韩欧美中文一区| 欧美日韩精品三区| 久久久精品国产一区二区三区| 国内成人在线| 91在线播放网址| 国产a视频精品免费观看| 麻豆精品在线看| 五月激情丁香一区二区三区| 亚洲精品中文在线观看| 中文字幕av不卡| 久久久久久9999| 精品国产网站在线观看| 欧美一区二区三区公司| 欧美手机在线视频| 色88888久久久久久影院野外 | 国自产拍偷拍福利精品免费一| eeuss鲁片一区二区三区| 国内精品久久久久影院色| 日韩高清不卡一区二区| 夜色激情一区二区| 亚洲另类在线制服丝袜| 中文字幕一区二区三区在线观看| 久久奇米777| 精品久久久久久久人人人人传媒 | 欧美日韩综合另类| 91免费国产视频网站| 国产精品亚洲а∨天堂免在线| 麻豆精品久久久| 日韩精品高清不卡| 亚洲成av人片在www色猫咪| 一区二区不卡在线视频 午夜欧美不卡在 | 精品视频色一区| 久久亚洲一区二区| 国产精品日韩欧美一区| 一区二区三区精品视频在线观看| 在线播放豆国产99亚洲| 国产精品a级| 狠狠色伊人亚洲综合网站色| 欧美日韩一区综合| 欧美日本一区二区视频在线观看| 不卡高清视频专区| 成人午夜私人影院| 成人免费av在线| 99久久久国产精品| 91美女片黄在线观看| 91蜜桃网址入口| 国产精品观看| 亚洲二区精品| 在线视频精品一区| 国产精品日韩二区| 久久精品一本| 欧美视频在线播放| 欧美精品成人一区二区三区四区| 欧美中文字幕一区二区三区亚洲| 欧美系列日韩一区| 欧美高清激情brazzers| 日韩三级电影网址| 欧美mv和日韩mv的网站| 亚洲精品一区二区三区香蕉| 26uuu亚洲| 国产精品国产a| 亚洲一区二区在线播放相泽| 性做久久久久久久久| 美国三级日本三级久久99| 精品一区二区三区在线播放视频| 国产麻豆精品视频| 99国内精品久久| 激情综合亚洲| 蜜桃伊人久久| 欧美日韩国产一级| 欧美精品一区二区三区蜜桃 | 亚洲一区二区三区四区五区中文 | 色综合激情久久| 69堂精品视频| 精品精品国产高清a毛片牛牛| 国产欧美日韩在线看| 亚洲丝袜制服诱惑| 香蕉成人伊视频在线观看| 久久97超碰色| 91丨porny丨首页| 99精品欧美一区二区三区| 色婷婷久久一区二区三区麻豆| 欧美日韩国产a| 久久综合久久综合久久综合| 国产精品成人免费精品自在线观看| 一区二区三区在线播放| 麻豆国产精品官网|