我创建了一个网站,用于从输入纯文本的用户生成哈希值,用户可以输入单词/短语并从MD5或SHA1(或两者)中进行选择。然后该站点获取此输入并将其转换为MD5& SHA1并将其存储在数据库中,然后将其返回给用户。用户还可以将哈希值输入到搜索栏中,如果数据库具有哈希值,它将返回原始词,目的是生成众包哈希表,同时为用户提供好处。我已经掌握了主要功能,但我对应该清理的内容感到困惑,我希望用户能够输入特殊字符,因为它会提高搜索功能返回结果的机会,任何建议都会受到赞赏,谢谢。
答案 0 :(得分:1)
如果要进行哈希处理,你不应该对任何事情进行清理,因为哈希函数通常不容易受到注入攻击。
当然,您应该清理所有数据库输入(用于插入和搜索)。但是,除非您使用的是一个不支持参数化查询的过时数据库API(例如mysql_*
函数;请避免这些),否则这将自动完成。
答案 1 :(得分:1)
我认为您的应用程序没有理由清理任何。你用户输入的所有功能都是将它提供给加密哈希函数,这些函数将很乐意接受任何字节序列。
当然,如果您在结果页面上显示输入字符串,则应在将其嵌入HTML代码之前使用htmlspecialchars()将其转义。类似地,如果您将其作为参数包含在URL中,则应使用urlencode()将其转义,如果将其存储在SQL数据库中,则应使用适当的数据库驱动程序转义函数对其进行转义。 (例如mysqli::escape_string()),或者只使用prepared SQL statements with placeholders。
另请注意,加密哈希函数对字节字符串进行操作,而不是对字符串进行操作。这意味着,特别是对于包含非ASCII字符的文本,哈希值将取决于用于将其编码为字节的character encoding。对于Unicode文本,它还可能取决于使用的normalization form。 UTF-8(标准化形式为C或D,或者只是用户浏览器发送的任何内容)现在可能是一个相当普遍的选择,但如果您想要有所帮助,您可能希望为您的用户提供不同编码的选择。 / p>