【问题标题】:How can I sanitise input for a hash converter in PHP? [closed]如何在 PHP 中清理哈希转换器的输入? [关闭]
【发布时间】:2013-03-21 11:41:03
【问题描述】:

我创建了一个网站,该网站可以从用户输入纯文本中生成哈希值,用户可以输入单词/短语并从 MD5 或 SHA1(或两者)中进行选择。然后,该站点获取此输入并将其转换为 MD5 和 SHA1 并将其存储在数据库中,然后将其返回给用户。用户还可以在搜索栏中输入哈希,如果数据库有哈希,它将返回原始单词,目的是生成众包哈希表,同时为用户提供好处。我已经使主要功能正常工作,但我对应该清理什么感到两难,我希望用户能够输入特殊字符,因为这将提高搜索功能返回结果的机会,任何建议将不胜感激,谢谢。

【问题讨论】:

  • -1 用于创建此服务。
  • 只要在将 转换为 哈希时对输入进行 MD5'ing 或 SHA1'ing,什么都不需要清理,对吧?并且在搜索现有散列时,无论如何这都不应该包含特殊字符,因此应该对这个 进行清理。我也重新标记了你的问题。这称为rainbowtable,而不是hashtable - 这是不同的东西。
  • @WasimAbu-Nassar 这是我的第一个编程项目,你有什么问题?
  • 彩虹表用于破解密码...这是@WasimAbu-Nassar 的问题。

标签: php md5 sha1 sanitize rainbowtable


【解决方案1】:

如果只是要进行散列处理,则不必对其进行清理,因为散列函数通常不易受到注入攻击。

当然,您应该清理所有数据库输入(用于插入和搜索)。但是,除非您使用不支持参数化查询的过时数据库 API(例如 mysql_* 函数;避免使用这些函数),否则这将自动完成。

【讨论】:

    【解决方案2】:

    我认为您的应用程序没有理由清理任何东西。您对用户输入所做的只是将其提供给加密哈希函数,这些函数将很乐意接受任何字节序列。

    当然,如果您在结果页面上显示输入字符串,您应该在将其嵌入 HTML 代码之前使用htmlspecialchars() 对其进行转义。同样,如果您将它作为参数包含在 URL 中,您应该使用 urlencode() 对其进行转义,如果您将其存储在 SQL 数据库中,您应该使用适合您的数据库驱动程序的转义函数(例如mysqli::escape_string()),或者直接使用prepared SQL statements with placeholders

    另请注意,加密哈希函数对字节字符串进行操作,而不是对字符串进行操作。这意味着,特别是对于包含非 ASCII 字符的文本,哈希值将取决于用于将其编码为字节的 character encoding。对于 Unicode 文本,它还可能取决于使用的 normalization form。 UTF-8(具有规范化形式 C 或 D,或者只是用户的浏览器发送的任何内容)可能是当今相当普遍的选择,但如果您想提供帮助,您可能希望为您的用户提供不同编码的选择。

    【讨论】:

    • 感谢您的回复。我认为@Danny Beckett 的建议是一个可行的选择,如果我在将字符串插入数据库之前将它们转换为 MD5 或 SHA1,我认为不会有漏洞。虽然我会研究 htmlspecialchars() 以将其嵌入到 HTML 代码中,谢谢
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2017-06-09
    • 2011-09-01
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多