-3

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

4

2 回答 2

1

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

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

于 2013-03-21T11:45:42.450 回答
1

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

当然,如果您在结果页面上显示输入字符串,您应该在将其嵌入 HTML 代码之前使用htmlspecialchars()对其进行转义。同样,如果您将其作为参数包含在 URL 中,则应使用urlencode()对其进行转义,如果将其存储在 SQL 数据库中,则应使用数据库驱动程序的适当转义函数对其进行转义(例如mysqli::escape_string()),或者只使用带有占位符的准备好的 SQL 语句

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

于 2013-03-21T11:49:20.603 回答