美文网首页工作生活
java如何设计一个安全可靠的手机验证码流程。

java如何设计一个安全可靠的手机验证码流程。

作者: 大继 | 来源:发表于2019-07-04 00:38 被阅读0次

    目的

    提搞一下大家对安全的意识,顺便梳理一下自己的看法。

    目前不可靠的方式

    • 使用验证码,很多同学都以为在发送验证码的时候加个验证码就安全了,其实看过一点相关的AI 算法,就知道验证码破解非常简单。

    大难题,手机注册。

    • 如果是我会偏向可以用为主,不做IP 限制,毕竟这种攻击,损人不利己,除非同行。
    • 很难区别,开大型会场和学校这种同一ip多人使用。
    • 小弟不才,没能找到很好的方案,尽量避免这种方式。

    我觉得比较靠谱的方式

    • 1,在发起服务限制手机 10分钟内存在 3个未使用验证码禁止继续请求。防止无限制请求漏洞。
    • 2,验证码每日错误超过10次就锁定,防止一直试,总会中奖。
    • 3,年错误不能超过60次,防止暴力破解,每天都来的那种鬼。
    • 4,用户每分钟只能发送一次。
    • 5,使用用户级别错误记录,一天错10次就不再给他发送。(绑定手机的业务)

    实现上的细节

    以java为例子:

    //我们都是这样进行创建,然后补补0
    int randomCodeInt = (int)(random.nextGaussian()*1000000);
    
    • 经过资料查询,Math.random() 以一个方法+System.nanoTime() 纳秒来生成种。
    • 在代码泄露的情况下,发送随机码会有延迟,就算黑客同步时间也无法估算他的值,但是可以缩小范围。
    • 实际使用延迟100+-ms 按限制设计3个限制。 中奖几率在 3% 左右。每天 10次也就上30%
    • 固定种在启动的时间 更加安全,启动延迟更加严重,严重到秒级基本无法接近。

    主机安全

    顺便说一下主机安全, 主机不要直接暴露,最理想的暴力的主机是硬件及的。 并使用 RAS 登陆,不要用普通的秘密。

    结束

    欢迎大家补充,毕竟安全无上限。

    相关文章

      网友评论

        本文标题:java如何设计一个安全可靠的手机验证码流程。

        本文链接:https://www.haomeiwen.com/subject/osxkhctx.html