2010-01-11 182 views
4

我试图通过确保数据对特定字段有效(例如名称不能包含特殊字符/数字等)来清理输入的任何数据。但是,我不确定在什么时候该做什么它来到一个密码字段。我甚至需要打扰任何消毒,因为密码只是散列?如果用户通过密码文本框注入任何恶意内容,我是否应该检查任何可疑内容? AFAIK,一些用户可能(应该)具有特殊字符,如'<>',这通常会触发潜在的攻击警报。我应该只保留密码字段的unsanitized?限制密码输入对我来说是最后的选择,因为我觉得用户应该在他们的密码中使用各种各样的字符。是否需要密码输入消毒?

谢谢

+4

谢谢你考虑这件事,并做正确的事(tm)。我非常厌倦网站,将您限制为特定字符集或仅限10个字符或更少。是的,我正在谈论白痴的银行网站。 – NotMe 2010-01-11 21:56:16

+0

大声笑,我知道你的意思。我仍然没有看到一个有效的理由来阻止用户的密码。 – XSL 2010-01-11 23:21:06

+0

这可能是值得禁止(但可能不会剥离)一些字符。例如控制字符,虽然有些人习惯把制表符放在UNIX密码中(我相信)。 – 2010-01-11 23:29:08

回答

3

只要你在应用程序中散列它,你应该没问题。

一点题外话考虑您正在使用asp.net,但如果你正在使用PHP和MySQL做这样一个值得注意的例外,这将是:

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

在这种情况下,你会想先清理$ pwd。

+0

感谢您的回复。我正在使用ASP.NET会员控制来完成所有这些操作,所以希望我不必进行任何手动密码更改。因此,只有散列才会被存储,我猜这意味着没有威胁。 – XSL 2010-01-11 23:22:59

+0

在PHP \ MySQL的情况下,为什么需要清理$ pwd,如果它被哈希? – Ubeogesh 2017-09-29 13:35:32

+1

@Ubeogesh $ pwd不被散列。 MySQL中的PASSWORD()函数为你散列。也就是说,我不推荐使用MySQL的PASSWORD函数,因为有更好的密码散列可供选择。 – 2017-09-29 19:50:10

3

如果您担心SQL注入攻击,则应该开始使用参数化查询与数据库交互。因为确定密码的有效字符是一个商业规则,所以我不会剥夺任何东西,而我的客户不会这样说。

所有其他输入都应进行消毒,因为它们也可能会显示在您的页面输出中,并可能导致XSS攻击。

+0

嗨。我正在使用ASP.NET控件来允许用户注册和更改密码,所以我相信查询会自动进行参数化。我在UserCreated事件之前手动清理其他输入,但密码输入可能会被编码,从而更改实际密码。 (例如<成为&lt)。 – XSL 2010-01-11 23:25:35

+0

底线是:它不重要,因为它总是会取代<由< – 2010-01-11 23:28:14

+0

这是一个公平点,只要我在项目上工作,没关系。我只是想从长远来看,如果项目易手,其他开发人员可能会开始直接与密码进行交互,而不是使用可能导致混淆的相同方法对其进行编码。虽然这是不太可能的,但我喜欢在谨慎的方面犯错。 – XSL 2010-01-11 23:32:09