Java 短信和电子邮件安全

Java 短信和电子邮件安全,java,security,email,sms,Java,Security,Email,Sms,在我的java web应用程序中,当管理员添加用户时,我的系统会生成一个长度为12的随机字母数字字符串激活密钥 此键分为2个部分,每个部分的长度为6。激活密钥的一部分通过用户手机短信发送,第二部分通过电子邮件发送到用户的电子邮件ID 有人告诉我,短信和电子邮件很容易被黑客攻击,所以如果你通过短信和电子邮件发送激活密钥,黑客可以很容易地检索到它 我该怎么解决这个问题 短信和电子邮件安全吗 我是否可以使用任何第三方安全机制 其他网站如何发送电子邮件和短信 目前,我的系统使用Way2SMS API

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

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

有人告诉我,短信和电子邮件很容易被黑客攻击,所以如果你通过短信和电子邮件发送激活密钥,黑客可以很容易地检索到它

  • 我该怎么解决这个问题

  • 短信和电子邮件安全吗

  • 我是否可以使用任何第三方安全机制

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


目前,我的系统使用Way2SMS API发送短信,并使用gmail发送电子邮件。

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


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

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

@尤金:这是个好主意,哈哈,我没想到这个^

电子邮件很容易(相对而言)被黑客攻击,因为邮件是直接发送的,并且可能通过许多未知的服务器路由

短信更难,但并非不可能


但是,对于大多数情况,短信和电子邮件的组合以及到期时间(即必须在24小时内完成登录)应被视为足够安全。

ya但输入十六进制值的哈希值对用户来说会更困难。这将更困难,但是,与明文拆分相比,它将进一步提高安全性,就像您有一半一样,您可以更轻松地强制执行明文密码的另一半,而不是强制执行md5哈希的另一半。我不会拆分密码。我正在生成一个随机字母数字字符串,然后将其拆分。好的,您可以为具有以下内容的用户创建一个临时字典(python字典示例):
user={'Username':Username,'Password':Password,'Key':randkey,'hkey1':hashkey1,'hkey2':hkey2}
生成一个随机数,将随机数转换为字符串,然后将字符串转换为md5散列,将散列一分为二,并通过电子邮件/短信发送。然后你可以把它们放在一起,查字典确认。对于
'hkey2':hkey2
我的意思是放
'hkey2':hashkey2
:谢谢你的快速回复。但我没有得到你的答案。请你再详细说明一下好吗。求求你,我是一个学生,所以可能会发生,我没有得到你想要说的东西。所以你能用简单的话来解释我吗?没什么好解释的。在生成令牌并通过电子邮件和SMS发送它们之后,您可以从servlet代码中获取HttpSession实例,并使用setAttribute()存储这些令牌。当用户在web UI上输入这些令牌时,您将从HttpSession获得存储值并进行比较。HttpSession实例始终与用户连接相链接(通常通过特殊的请求参数或cookie值,如JSSessionID),因此其他用户将拥有不同的会话,除非他窃取了JSSessionID值,但如我所说,您可以通过使用https使其变得更加困难。但如果出现会话超时,并且用户没有在会话超时间隔内输入令牌,该怎么办?这意味着我想说的是,当用户将首先收到这些令牌时,他需要提供登录时的电子邮件id和密码。成功登录后,将创建一个新会话,如果帐户未激活,系统将询问激活代码。如何将令牌绑定到新会话或将来将创建的会话。对于第一种方法,整个想法是用户在不创建新会话的情况下得到验证。所以,如果会话过期,他将不得不重新开始。使用我的回答中的第二种方法,您可以创建一个新会话,因为它基于一个只有用户知道且无法被拦截的“秘密”部分。