【问题标题】:Name a method to get url safe unique links (.net)命名一个方法来获取 url 安全的唯一链接 (.net)
【发布时间】:2013-05-19 18:09:51
【问题描述】:

编辑1:也许我之前不是很清楚。对于以下情况,我想知道最佳/标准方法。

我有一个 .NET 4 Web 应用程序,出于各种原因,我需要向我们的客户发送唯一链接。(如密码重置、邀请、帐户验证等)

链接结构通常为 mysite/some-action?key=some-unique-value

我应该怎么做才能生成 "some-unique-value" 部分?不管是什么方法,它都不应该破坏我的 URL。

我发现一些关于 SO 的问题与我的需求很接近,但无法完全确定。
也让我知道是否有更好/标准的方法来实现这种功能。谢谢。

【问题讨论】:

  • 不能使用 GUID 吗?
  • @Edward 很多人建议不要在 SO 的类似讨论中使用 GUID。所以我不喜欢它们。
  • 您将基于什么信任进行加密以及您计划如何避免重放攻击?您可能和我们一样,通过发送与数据库中的某些一次性数据相关联的唯一键。在其他不安全的 URL 中发送加密数据(假设这不是 https)是不安全的
  • @Devin 我不太同意,GUID 不会破坏 HTML,而且非常独特;您必须保存用于防止链接重用的链接导航(嗅探或电子邮件重用)
  • 为什么你不能对你认为适合你需要的唯一标识符进行 URL 编码?

标签: c# asp.net encryption


【解决方案1】:

假设您得到一个字节数组 - 您可以使用以下方法将其转换为十六进制:

BitConverter.ToString(bytes);

您可能希望使用诸如SHA1 之类的哈希算法来代替加密。

【讨论】:

  • 谢谢。我现在尝试了 SHA256,它似乎符合要求。希望这是相当安全和 URL 安全的。
  • @Devin 只是确保我很清楚:URL 安全性是通过转换为十六进制,它只给你 0-9 和 A-F(和“-”)。哈希只是一个想法。
【解决方案2】:

您可以尝试加密您的查询字符串参数,here 是一个很好的解释。 (Source)

【讨论】:

    【解决方案3】:

    使用 server.UrlEncode 进行编码,使用 Server.UrlDecode 进行解码

    Dim Url As String = "something.aspx?" 
    Url & = "key = " & Server.UrlEncode("someUniqueValue")
    

    编辑:您不必在服务器上解码 url 字符串,因为它由 asp.net 自动解码,第二次解码可能会导致问题,特别是如果您的原始 url 包含将被解码的“+”到一个空间。

    【讨论】:

    • 这可能会解决我的问题的第 2 步。第 1 步是生成唯一值。
    • 是的,这将允许任何特殊字符在浏览器和服务器之间无缝传递。
    • 当然!我最初关心的是如何产生独特的价值。基于cmets,我使用SHA256。
    猜你喜欢
    • 2012-11-07
    • 2011-04-06
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2018-05-16
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多