【问题标题】:SMS and Email Security短信和电子邮件安全
【发布时间】:2012-04-10 06:38:43
【问题描述】:

在我的 java web 应用程序中,当管理员添加用户时,我的系统会生成一个长度为 12 的随机字母数字字符串激活密钥。

此密钥分为 2 部分,每部分长度为 6。激活密钥的一部分通过用户的手机短信发送,第二部分通过电子邮件发送到用户的电子邮件 ID。

有人告诉我,短信和电子邮件很容易被黑客入侵,所以如果您通过短信和电子邮件发送激活密钥,黑客可以轻松取回它。

  • 我应该怎么做才能解决这个问题?

  • 短信和电子邮件安全吗?

  • 我可以使用任何第三方安全吗?

  • 其他网站如何发送电子邮件和短信?

目前我的系统使用 Way2SMS-API 发送 SMS 并使用 gmail 发送电子邮件。

【问题讨论】:

    标签: java security email sms


    【解决方案1】:

    电子邮件很容易(相对而言)被黑客入侵,因为邮件是简单发送的,并且可能会通过许多未知的服务器进行路由。

    短信更难,但并非不可能。

    但是,对于大多数用途而言,SMS 和电子邮件的组合以及到期时间(即必须在 24 小时内完成登录)应该被认为足够安全。

    【讨论】:

      【解决方案2】:

      解决此问题的一种简单方法是要求在您的 Web 应用程序中的原始 HttpSession 仍处于活动状态时输入安全令牌。因此,即使黑客拦截了您的消息,他也无法使用它,因为会话归用户所有(例如,生成的令牌存储在会话属性中,因此您可以在用户在 Web UI 上输入它们时进行比较)。那么拦截它的唯一方法就是使用“中间人攻击”,但可以通过使用https来击败它。

      另一种方法是向用户显示密钥的一部分,因此他必须与他将在电子邮件中收到的部分一起重新输入。因此,即使黑客窃取了该电子邮件,他也无法知道在生成电子邮件时向用户显示的内容。

      【讨论】:

      • 您好,感谢您的快速回复。但我没有得到你的答案。请您尝试详细说明。请我是一名学生,所以我可能没有得到你想说的东西。那你能用简单的话解释一下吗?
      • 真的没什么好解释的。在生成令牌并通过电子邮件和 SMS 发送它们后,您可以从 servlet 代码中获取 HttpSession 实例并使用 setAttribute() 存储这些令牌。当用户在 Web UI 上输入这些令牌时,您会从 HttpSession 获取存储的值并进行比较。 HttpSession 实例始终与用户连接(通常通过特殊请求参数或 cookie 值,如 jsessionid)链接,因此另一个用户将拥有不同的会话,除非他窃取该 jsessionid 值,但就像我说的那样,您可以通过使用 https。
      • 但是如果会话超时并且用户没有在会话超时间隔中输入令牌怎么办?意思是当用户首先收到这些令牌时,他需要提供他的电子邮件 ID 和密码才能登录。成功登录后,将创建一个新会话,然后如果帐户未激活,系统会要求输入激活码。我如何将我的令牌绑定到新会话或将来创建的会话。
      • 对于第一种方法,整个想法是在不创建新会话的情况下验证用户。因此,如果会话到期,他将不得不重新开始。使用我回复中的第二种方法,您可以创建一个新会话,因为它基于只有用户知道并且无法被拦截的“秘密”部分。
      【解决方案3】:

      好吧,你可以使用Md5 并通过短信发送一半,通过电子邮件发送一半,然后根据记录的密码的哈希值检查它,如果正确,允许他们注册,否则,不要让他们注册。但是,这是假设这两个(电子邮件/短信)中只有一个被黑客入侵。否则,如果他们两个都得到了,那就达不到目的了。

      @Eugine 这是个好主意,哈哈,我没想到那个。 ^.^

      【讨论】:

      • 是的,但是输入一个十六进制值对用户来说会更困难的哈希。
      • 这会更困难,但是它会比明文拆分更安全,就像你有一半一样,你可以更容易地暴力破解明文密码的另一半,然后暴力破解另一半一半的 md5 哈希。
      • 我没有拆分密码。我正在生成一个随机的字母数字字符串,然后将其拆分。
      • 好的,您可以为具有以下内容的用户制作一个临时字典(python 字典示例):user={'Username':username,'Password':password,'Key':randkey,'hkey1':hashkey1,'hkey2':hkey2} 生成一个随机数,将随机数转换为字符串,然后将字符串转换为md5 散列,将散列一分为二,并通过电子邮件/短信发送。然后你可以把它们放在一起,查字典确认。
      • 对于'hkey2':hkey2 我的意思是把'hkey2':hashkey2 :P
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 1970-01-01
      相关资源
      最近更新 更多