【问题标题】:Is password input sanitization required?是否需要对密码输入进行清理?
【发布时间】:2011-01-03 22:47:47
【问题描述】:

我正在尝试通过确保数据对特定字段有效(例如名称不能包含特殊字符/数字等)来清理输入的任何数据。但是,我不确定该怎么做当涉及到密码字段时。由于密码只是散列,我什至需要进行任何清理工作吗?如果用户要通过密码文本框注入任何恶意内容,我是否应该费心检查任何可疑内容? AFAIK,一些用户可能(应该!)具有特殊字符,例如“”,这通常会触发潜在的攻击警报。我应该不清理密码字段吗?限制密码输入对我来说是最后的手段,因为我认为用户应该在密码中使用各种字符。

谢谢

【问题讨论】:

  • 感谢您思考这个问题并做正确的事 (tm)。我厌倦了将您限制为特定字符集或仅 10 个字符或更少的网站。是的,我说的是白痴建立银行网站。
  • 大声笑,我知道你的意思。我仍然没有看到任何妨碍用户密码的正当理由。
  • 可能值得禁止(尽管可能不会剥离)某些字符。例如控制字符,尽管有些人习惯在 UNIX 密码中使用制表符(我相信)。
  • 我认为如果散列没有减轻任何危险代码,这将是最好的方法。由于原始密码没有存储在任何地方,加盐哈希应该没问题。
  • @XSL 同意!密码应尽快进行哈希处理。如果通过密码中注入的代码对某些网站进行了攻击,则该网站传递原始密码的时间过长。

标签: asp.net security input passwords sanitization


【解决方案1】:

只要您在应用程序中对其进行哈希处理,就应该没问题。

考虑到您使用的是 asp.net,这有点离题了,但如果您使用的是 PHP 和 MySQL 并执行以下操作,则有一个明显的例外:

UPDATE users SET password = PASSWORD('$pwd') WHERE userid = $uid

在这种情况下,您需要先清理 $pwd。

【讨论】:

  • 感谢您的回复。我正在使用 ASP.NET 成员控制来完成所有这些操作,因此希望我不必手动更改密码。因此,只有哈希值会被存储,我猜这意味着没有威胁。
  • 在 PHP\MySQL 的情况下,如果 $pwd 被散列,为什么还需要清理它?
  • @Ubeogesh $pwd 没有经过哈希处理。 MySQL 中的 PASSWORD() 函数会为您进行哈希处理。也就是说,我不建议使用 MySQL 的 PASSWORD 函数,因为有更好的密码散列替代方法。
【解决方案2】:

如果您担心 SQL 注入攻击,您应该开始使用参数化查询与您的数据库进行交互。由于确定密码的有效字符是一项业务规则,因此当我的客户不这么说时,我不会删除任何内容。

应清理所有其他输入,因为它们也可能显示在您的页面输出中并可能导致 XSS 攻击。

【讨论】:

  • 嗨。我使用 ASP.NET 控件来允许用户注册和更改密码,所以我相信查询是自动参数化的。我在 UserCreated 事件之前手动清理其他输入,但密码输入可能会被编码,从而更改实际密码。 (例如
  • 底线是:没关系,因为它总是将
  • 这是一个公平的观点,只要我在做这个项目,那很好。从长远来看,我只是在想,如果项目易手,其他开发人员可能会开始直接与密码交互,而不是用相同的方法对密码进行编码,这可能会导致一些混乱。尽管这不太可能发生,但我宁愿谨慎行事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
相关资源
最近更新 更多