2013-03-21 79 views
-3

我制作了一个网站,可以从输入纯文本的用户生成哈希,用户可以输入一个单词/短语并从MD5或SHA1(或两者)中进行选择。然后该站点接受该输入并将其转换为MD5 & SHA1并将其存储在数据库中,然后将其返回给用户。用户也可以在搜索栏中输入哈希值,如果数据库有哈希值,它会返回原始的字,目的是生成众包的哈希表,同时为用户带来好处。我有主要的功能工作,但我有什么我应该sanitize两难,我希望用户能够输入特殊字符,因为它会提高搜索功能返回结果的机会,任何意见,将不胜感激,谢谢。我该如何清理PHP中的散列转换器的输入?

+0

-1创建此服务。 – user0103 2013-03-21 11:43:37

+0

只要您将MD5或SHA1转换为*时的输入,就不需要消毒,对吧?当搜索一个现有的散列时,它不应该包含特殊字符,所以这*应该被消毒。我也重申了你的问题。这被称为[tag:rainbowtable],而不是[tag:hashtable] - 这是不同的。 – 2013-03-21 11:45:12

+0

@ WasimAbu-Nassar这是我的第一个编程项目,你有什么问题? – crhodes 2013-03-21 11:48:35

回答

1

如果散列函数一般不会受到注入攻击,那么不应该对它进行消毒处理。

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

1

我看不到您的应用程序的任何理由消毒什么。用户输入的所有内容都是将其提供给密码散列函数,并且这些函数将愉快地接受任何字节序列。

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

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

+0

感谢您的回复。我认为@Danny Beckett的建议是一个可行的选择,如果我在将字符串插入数据库之前将其转换为MD5或SHA1,我认为不存在漏洞。虽然我会查看htmlspecialchars()将其嵌入到HTML代码中,但我还是会尝试使用 , 谢谢 – crhodes 2013-03-21 11:56:27