我制作了一个网站,可以从输入纯文本的用户生成哈希,用户可以输入一个单词/短语并从MD5或SHA1(或两者)中进行选择。然后该站点接受该输入并将其转换为MD5 & SHA1并将其存储在数据库中,然后将其返回给用户。用户也可以在搜索栏中输入哈希值,如果数据库有哈希值,它会返回原始的字,目的是生成众包的哈希表,同时为用户带来好处。我有主要的功能工作,但我有什么我应该sanitize两难,我希望用户能够输入特殊字符,因为它会提高搜索功能返回结果的机会,任何意见,将不胜感激,谢谢。我该如何清理PHP中的散列转换器的输入?
回答
如果散列函数一般不会受到注入攻击,那么不应该对它进行消毒处理。
当然,您应该清理所有数据库输入(用于插入和搜索)。但是,除非您使用不支持参数化查询的陈旧数据库API(例如mysql_*
函数;请避免这些),否则这将自动完成。
我看不到您的应用程序的任何理由消毒什么。用户输入的所有内容都是将其提供给密码散列函数,并且这些函数将愉快地接受任何字节序列。
当然,如果您在结果页面上显示输入字符串,则应在将其嵌入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代码中,但我还是会尝试使用 , 谢谢 – crhodes 2013-03-21 11:56:27
- 1. 如何清理PHP $ _POST []输入?
- 2. 如何清理ASP.NET中的MCE输入?
- 3. 将用户输入字符串转换为java中的散列
- 4. 我如何清理Erlang输入?
- 5. codeigniter如何清理输入?
- 6. 如何在php中清理简单的_GET输入url到mysql
- 7. 清理输入中的Joomla
- 8. PHP清理置换阵列
- 9. 使用PHP PDO时,我应该清理/过滤用户输入和输出吗?
- 10. 如何在wordpress中清理输入
- 11. 我如何散列转换成阵列阵列中的红宝石
- 12. 如何转换INT(输入)到列表
- 13. mongodb - 如何清空散列
- 14. 转换“denormalised”散列
- 15. 如何更新散列数组中的值,该散列值位于perl中散列的散列中?
- 16. 我应该如何清理symfony2缓存
- 17. 我该如何正确清理UIButton
- 18. 我该如何清理增长堆?
- 19. 我该如何清理这个javascript jquery
- 20. 将用户输入转换为PHP中的列表数组
- 21. 将散列转换为嵌套散列
- 22. 如何将perl散列转换为javascript散列
- 23. 如何将一个散列转换为另一个散列?
- 24. 如何将散列数组转换为散列值数组?
- 25. 我应该在'before_validate'还是'before_save'时清理用户输入?
- 26. 我应该将输入清理为参数化查询吗?
- 27. 使用散列将不可信输入转换为可信输入
- 28. PHP - 清理富文本区域输入
- 29. PHP清理粘贴微软输入
- 30. 如何从params散列中清除image_submit_tag?
-1创建此服务。 – user0103 2013-03-21 11:43:37
只要您将MD5或SHA1转换为*时的输入,就不需要消毒,对吧?当搜索一个现有的散列时,它不应该包含特殊字符,所以这*应该被消毒。我也重申了你的问题。这被称为[tag:rainbowtable],而不是[tag:hashtable] - 这是不同的。 – 2013-03-21 11:45:12
@ WasimAbu-Nassar这是我的第一个编程项目,你有什么问题? – crhodes 2013-03-21 11:48:35