1|0背景
上午临近午饭时,公司同事反馈验证码被攻击灌水。我们匆忙查询验证码明细,对已频繁出现的IP插入黑名单,但IP仍然隔断时间频繁变动,不得已之下只能先封禁对应公司id的验证码发送功能。年初时候,专门对SSO站点的发送验证码升级到极验的验证,已经杜绝了普通的攻击,没想到没升级的这个系统又遭受洗礼...
2|0思考办法
防灌水通用解决办法一般有几种:
Ip+手机号限制
频繁变化ip和手机号时,此办法无效
发送验证码页面端提供简单图形验证码
能解决部分攻击。
采取12306图片库或极验等复杂手段
能解决大部分攻击,但超过一定频率需要收费
3|0学到的知识点
由于调用发送验证码的方法非常多,在这个方法内只能定位到IP和手机号,定位不到Web层具体的Action,在此过程中了解到https://www.cnblogs.com/huangtailang/p/4550177.html所提到的System.Diagnostics.StackTrace和System.Diagnostics.StackFrame定位到方法上层调用堆栈。然后就顺腾摸瓜把漏掉图形验证码的常用页面先补上,不常用的页面改掉发送接口。处理细节不再细述,只记录下Diagnostics的相关信息。
下面我们定义一些代码来演示效果:
然后在Web层调用First.Start
这个调用信息是由Third.Start记录,可见能追踪到完整的调用链。这只是简单的演示,如更复杂的交叉调用,异步、并行等的并未在这里实践。
4|0扩展思考
以上方法适用于.netFramework和.netCore,可用于做日志记录,调用链等行为。
asp.netcore里也有Microsoft.AspNetCore.Diagnostics,https://www.cnblogs.com/linezero/p/Diagnostics.html
略作总结,本篇结束,那帮闲的蛋疼乱搞攻击的人,折腾了我一天。虽然已经禁了他们发送验证码,但还是一直在发请求,头疼ying....留个念头以待以后深思。
安全和防护依然是重中之重啊!
5|0参考链接
https://www.cnblogs.com/huangtailang/p/4550177.html
原文地址:https://www.cnblogs.com/fancunwei/p/10146151.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com