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

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

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

1

主題

2

回帖

3

積分

初學(xué)乍練

貢獻(xiàn)
0 點(diǎn)
金幣
0 個(gè)
樓主
發(fā)表于 2025-8-20 09:24:30 | 只看樓主 |倒序?yàn)g覽 |閱讀模式

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

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

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

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

天降飛鍋

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

攻防階段1:封IP

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

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

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

攻防階段2:關(guān)入口

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

在Discuz管理后臺(tái)關(guān)閉注冊(cè)入口,如下圖所示:

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

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

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

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

在管理后臺(tái)反復(fù)查看后,就試著修改驗(yàn)證方式,把原來的的“英文圖片驗(yàn)證碼”修改為“位圖驗(yàn)證碼”,肉眼看起來識(shí)別難度高一丟丟,不過事實(shí)證明,對(duì)于黑產(chǎn)來說,這不是事,應(yīng)該是有方法可以直接破解的,因?yàn)樗鼈兊恼?qǐng)求量并沒明顯下降。

在Discuz管理后臺(tái)修改驗(yàn)證碼設(shè)置:

修改前后驗(yàn)證碼圖片對(duì)比:

攻防階段4:升級(jí)驗(yàn)證方式

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

在管理后臺(tái)啟用該功能:

啟用后效果如下圖所示:

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

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

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

經(jīng)過一番艱難的摸索測(cè)試,最終發(fā)現(xiàn)只需要對(duì)Discuz源碼中的模板文件做非常小的修改即可實(shí)現(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}-->

上述改動(dòng)的作用是使得 用戶登錄功能也能同時(shí)啟用兩種驗(yàn)證方式。

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

--- 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="手機(jī)號(hào)" lay-reqtext="請(qǐng)?zhí)顚懯謾C(jī)號(hào)" 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">

上述改動(dòng)的作用是使得 忘記密碼功能也能同時(shí)啟用兩種驗(yàn)證方式。

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

問題暫時(shí)得以解決,接下來要繼續(xù)關(guān)注黑勢(shì)力還有什么新的小動(dòng)作了。

以上,全文完。

如果對(duì)你有幫助的話,還請(qǐng)幫忙動(dòng)動(dòng)可愛的小手點(diǎn)贊、轉(zhuǎn)發(fā)。




原文鏈接:https://mp.weixin.qq.com/s/PNIwKHNKC1IxOFyOyHXGPA
我知道答案 回答被采納將會(huì)獲得1 貢獻(xiàn) 已有4人回答
回復(fù)

使用道具 舉報(bào)

1

主題

2

回帖

3

積分

初學(xué)乍練

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

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

  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. +               //驗(yàn)證問題顯式最多支持30個(gè)(原先是10個(gè))
  8. +               //同時(shí)解決了原先超過10個(gè)問題后,100以內(nèi)計(jì)算被自動(dòng)禁用的bug
  9. +               foreach(C::t('common_secquestion')->fetch_all($start_limit, 30) as $item) {
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

4

主題

45

回帖

55

積分

漸入佳境

貢獻(xiàn)
0 點(diǎn)
金幣
0 個(gè)
板凳
發(fā)表于 2025-8-20 11:58:20 | 只看Ta
學(xué)習(xí)一下~
回復(fù)

使用道具 舉報(bào)

1

主題

2

回帖

3

積分

初學(xué)乍練

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

這里其實(shí)還可以修改為下面這樣,實(shí)現(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) {
復(fù)制代碼


歡迎關(guān)注我的微信公眾號(hào):老葉茶館
回復(fù)

使用道具 舉報(bào)

6

主題

137

回帖

175

積分

漸入佳境

貢獻(xiàn)
5 點(diǎn)
金幣
4 個(gè)
5#
發(fā)表于 2025-8-23 22:47:31 | 只看Ta
學(xué)習(xí)一下 ?。。?/td>
回復(fù)

使用道具 舉報(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-15 03:23 , Processed in 0.062784 second(s), 12 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

關(guān)燈 在本版發(fā)帖
有償服務(wù)QQ
有償服務(wù)微信
返回頂部
快速回復(fù) 返回頂部 返回列表
久久久久av_欧美日韩一区二区在线_国产精品三区四区_日韩中字在线
jvid福利写真一区二区三区| 日本高清不卡在线观看| 国产精品乱码一区二区三区| 奇米精品一区二区三区在线观看 | 亚洲欧洲一区| 午夜视频在线观看一区二区| 日韩精品一区二区三区在线 | 国产农村妇女精品一区二区| 国产河南妇女毛片精品久久久 | 日本视频中文字幕一区二区三区| 99久久久国产精品免费蜜臀| 久久99精品久久久久| 国产精品乡下勾搭老头1| 精品亚洲国内自在自线福利| 国产精品 日产精品 欧美精品| 精品久久免费看| 555夜色666亚洲国产免| 56国语精品自产拍在线观看| 欧美videos大乳护士334| 国产精品无圣光一区二区| 亚洲综合在线视频| 精品一区中文字幕| 成人短视频下载| 欧美日韩三级| 久久久久综合| 日韩亚洲欧美一区| 亚洲视频免费观看| 日韩黄色片在线观看| 男女激情视频一区| 国产精品影视天天线| 狠狠综合久久| 欧美日韩国产三级| 国产午夜亚洲精品理论片色戒| 欧美精选午夜久久久乱码6080| 国产精品chinese| 久久亚洲视频| 精品少妇一区二区三区在线播放 | 亚洲久草在线视频| 午夜电影网亚洲视频| 国产精品资源在线看| 99精品视频免费观看| 欧美日韩国产美女| 自拍偷拍国产精品| 国产不卡免费视频| 午夜亚洲影视| 26uuu亚洲| 午夜婷婷国产麻豆精品| 福利一区二区在线| 伊人久久成人| 欧美一区二区三区视频免费播放| 欧美三级电影精品| 国产精品国产三级国产aⅴ入口| 国产亚洲欧美色| 同产精品九九九| 国产成人超碰人人澡人人澡| 精品在线一区二区| 欧美不卡视频| 91精品国产乱码| 亚洲精选免费视频| 99视频精品免费视频| 在线观看日韩电影| 怡红院av一区二区三区| 91丨porny丨蝌蚪视频| 欧美性色黄大片| 欧美高清在线视频| 国产精品亚洲成人| 色妹子一区二区| 精品国产网站在线观看| 偷拍日韩校园综合在线| 国产精品分类| 日韩欧美国产麻豆| 久久精品国产成人一区二区三区| 日韩影院免费视频| 99热在这里有精品免费| 欧美日韩在线播放一区| 亚洲最新视频在线观看| 欧美日本亚洲韩国国产| 欧美不卡在线视频| 国产美女精品人人做人人爽| 国产午夜精品一区二区三区欧美 | 美女精品一区二区| 一本一道久久综合狠狠老精东影业| 91蜜桃在线观看| 亚洲区国产区| 亚洲欧洲日本在线| 91一区二区在线观看| 91精品久久久久久久99蜜桃 | 国产精品福利电影一区二区三区四区 | 亚洲国产成人91porn| 亚洲精品乱码视频| 国产精品久久久久桃色tv| 欧美精品首页| 中文字幕一区二区在线播放| 91同城在线观看| 久久久久久久久久久99999| 国产.精品.日韩.另类.中文.在线.播放| 成人黄色av网站在线| 欧美电影在哪看比较好| 奇米777欧美一区二区| 久久国产日韩| 日韩二区三区在线观看| 欧美视频一区在线观看| 久久99在线观看| 欧美一卡二卡在线| 成人av电影在线| 国产精品久久777777| 亚洲激情一区| 日本伊人色综合网| 欧美美女bb生活片| 成人av网站在线观看免费| 欧美午夜片在线看| 色综合色狠狠综合色| 欧美专区在线| 在线欧美一区二区| 国产精品电影一区二区三区| 国产电影精品久久禁18| 色综合久久久网| 亚洲综合色区另类av| 欧美连裤袜在线视频| 99久久精品国产麻豆演员表| 中文字幕一区二区三区不卡| 欧美日韩亚洲综合| 91国产视频在线观看| 国产精品88888| 一区二区不卡在线播放| 欧美日韩美女一区二区| 欧美激情在线免费观看| 91免费国产视频网站| 欧美日韩一区中文字幕| 国产91精品一区二区麻豆网站| 国产精品18久久久久久vr| 在线不卡中文字幕| 亚洲欧美影院| 婷婷综合在线观看| 精品国产区一区| 午夜一级在线看亚洲| 国产综合成人久久大片91| 国产女同互慰高潮91漫画| 久久久噜噜噜| 91老司机福利 在线| 日韩激情视频网站| 欧美国产日韩在线观看| 久久国产高清| 成人国产精品免费观看| 亚洲国产综合视频在线观看| 精品国产乱码久久久久久图片 | 午夜电影亚洲| 婷婷国产在线综合| 国产日韩视频一区二区三区| 色婷婷精品大视频在线蜜桃视频| 亚洲网友自拍偷拍| 欧美伊人久久大香线蕉综合69| 一区二区三区日韩| 欧美三级视频在线| 在线精品亚洲| 国产一区二区在线观看免费| 亚洲乱码国产乱码精品精小说| 亚洲美女黄网| 国产高清视频一区| 一区二区三区高清在线| 久久婷婷色综合| 欧美在线观看视频在线| 欧美chengren| 国产一区二区在线影院| 亚洲成年人影院| 国产精品美女www爽爽爽| 欧美一级午夜免费电影| 亚洲一区二区三区精品视频| 91一区二区在线| 久久成人羞羞网站| 午夜精品久久久久久久久久| 亚洲欧洲制服丝袜| 日韩国产精品久久久久久亚洲| 久久亚洲不卡| 黄色成人精品网站| 9i在线看片成人免费| 国产91丝袜在线观看| 国产一区二区三区精品视频| 蜜臀av性久久久久蜜臀av麻豆| 欧美日韩一区在线观看| 亚洲黄色在线| 91麻豆国产福利在线观看| 国产精品一区二区果冻传媒| 亚洲综合视频在线| 久久精品视频网| 亚洲激情二区| 亚洲欧洲一二三| 亚洲五月婷婷| 欧美久久一区| 91论坛在线播放| 91小视频免费观看| 懂色av一区二区三区免费观看| 国产午夜精品久久| 欧美一区二区三区四区久久| 欧美亚洲国产一卡| 在线视频综合导航| 在线精品国精品国产尤物884a| 成人综合激情网| 丝袜a∨在线一区二区三区不卡| 欧美性受极品xxxx喷水|