https带有令牌参数的URL:它有多安全?

时间:2009-03-13 15:49:31

标签: security url https token

在我们的网站上,我们根据用户的私人信息(通过表单提供)向用户提供模拟。我们希望以后允许他们重新使用他们的模拟结果,但不要强迫他们创建登录/密码帐户。

我们曾想过给他们发送一封带有链接的电子邮件,他们可以从中获取结果。但是,当然,我们必须保护此URL,因为私有数据受到威胁。

所以我们打算在URL中传递一个令牌(比如字母和数字的40个字符组合,或MD5哈希)并使用SSL。

最后,他们会收到一封类似的电子邮件:

  

您好,
  取回您的结果   https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn

你怎么看?它足够安全吗?你会为我的令牌生成提出什么建议?如何在https请求中传递URL参数?

9 个答案:

答案 0 :(得分:81)

SSL将保护传输中的查询参数;但是,电子邮件本身并不安全,电子邮件可能会在到达目的地之前沿任意数量的服务器反弹。

此外,根据您的Web服务器,可能会在其日志文件中记录完整的URL。根据数据的敏感程度,您可能不希望IT人员访问所有令牌。

此外,带有查询字符串的URL将保存在用户的历史记录中,允许同一台计算机的其他用户访问该URL。

最后,这使得这种非常不安全的原因是,URL在任何资源的所有请求的Referer头中发送,甚至是第三方资源。因此,如果您使用Google Analytics(分析),则会向Google发送URL令牌及其全部内容。

在我看来,这是一个坏主意。

答案 1 :(得分:11)

我会使用cookie。工作流程应该是这样的:

  1. 用户第一次来到您的网站。
  2. 网站设置Cookie
  3. 用户输入数据。使用存储在cookie中的某些密钥将数据存储在DB中。
  4. 当用户离开时,您会向他们发送一封包含https:link
  5. 的电子邮件
  6. 当用户回来时,网站会发现cookie并向用户显示旧数据。
  7. 现在,用户希望在不同的计算机上使用其他浏览器。在这种情况下,请提供“转移”按钮。当用户点击此按钮时,她将获得“令牌”。她可以在另一台计算机上使用此令牌来重置cookie。这样,用户就可以决定转移令牌的安全性。

答案 2 :(得分:4)

SSL保护传输中的数据内容,但我不确定该URL。

无论如何,缓解攻击者重用该URL令牌的一种方法是确保每个令牌只能使用一次。您甚至可以设置一个cookie,以便合法用户可以继续使用该链接,但在第一次访问后,它只适用于拥有cookie的人。

如果用户的电子邮件遭到入侵并且攻击者首先获得了该链接,那么,您已经被软管了。但是用户也有更大的问题。

答案 3 :(得分:1)

电子邮件本质上是不安全的。如果任何人都可以点击该链接并获取数据,那么您并没有真正保护它。

答案 4 :(得分:1)

通过SSL传递令牌是安全的。您将遇到的问题是,通过能够查看URL,人们(不是那些不适合的人)可以使用它。

如果它是SSN之类的私人信息,我认为我不会通过电子邮件发送URL。我宁愿让他们为网站创建用户名和密码。使用您和他们所涉及的那种信息来妥协电子邮件太容易了。如果有人的帐户被证实,那么它将会出现问题。从严格的CYA角度来看,您越安全越好。

答案 5 :(得分:0)

对于存在严重隐私问题的情况,我真的不会认为这足够安全。您在(可能是明文)电子邮件中发送URL的事实是迄今为止最薄弱的环节。在此之后,对令牌进行暴力攻击的风险(缺乏真实身份验证机制的结构)可能比构建良好的用户名和密码设置更容易受到攻击。

顺便说一句,https请求中的参数完全没有问题。

答案 6 :(得分:0)

实际上,这是一个坏主意。您将通过简单的使用来确保安全性。如前所述,SSL只会保护服务器和客户端浏览器之间的信息传输,只会阻止中间人攻击。电子邮件风险很大且不安全。

最好的是用户名和密码验证来访问信息。

我或多或少喜欢cookie的想法。您也应该加密cookie信息。 您还应该使用salt和关键短语以及$ _SERVER ['HTTP_USER_AGENT']生成令牌,以限制攻击的可能性。在cookie中存储有关客户端的尽可能多的非敏感信息以供验证使用。

关键词可以存储在cookie中以方便使用,但请记住,cookie也可能被盗=(。

最好让客户输入他提供的关键短语,也会将数据与他的数据一起存储在数据库中。

或者,如果此人使用不同于$ _SERVER ['HTTP_USER_AGENT']参数的机器或仅仅错过了cookie,则可以使用该密钥。因此可以转移或设置cookie。

还要确保在数据库中加密敏感数据。你永远不会知道;)

答案 7 :(得分:-1)

您知道如果有任何黑客可以访问您的数据库,可以自由地提供很多个人信息吗?

之后我会说这不是坏主意。我不会使用MD5或SHA1,因为它们对于散列不是很安全。它们可以很容易地“解密”(我知道它不是加密)。

否则我可能会使用不会通过电子邮件发送密码的第二个信息。原因很简单,如果有人可以访问用户的电子邮件(如果你不杀死你的会话就很容易使用hotmail),他将可以访问用户发送的任何信息。

请注意,HTTPS会保护从您的站点发送给最终用户的数据和加密数据。没有别的,把它作为一个安全的tunel。没有什么比这更重要了。

答案 8 :(得分:-1)

根据我对你的想法的理解,理论上有人可以输入一个随机的40个字符串或MD5哈希并获得别人的细节。虽然这可能非常不可能,但只需要发生一次。

更好的解决方法可能是向用户发送令牌,然后让他们输入一些详细信息,例如他们的姓名,邮政编码,ssn或其组合。