为什么用户名不可更改?

时间:2010-07-09 20:37:10

标签: security

我到处阅读(并在实践中看到)用户名不应该是可更改的。当我问为什么时,'安全'是一个理由。

我一直在寻找一个明确的答案,为什么更改用户名是不安全的,但我似乎无法找到答案。

这里有安全经验的人能回答这个问题吗?

注意:如果您不知道答案,请不要猜测。我自己想到了很多原因,但我不知道实际的答案,因此问题。

更新
1:通过userId我的意思是引用某种唯一标识符,无论是数据库记录ID还是其他一些唯一ID。我多次被告知,即使用户名不是系统本身的主要/唯一标识符,更改用户名也不利于安全性。

2:我允许用户更改他们的“公共名称”。这是用于向其他(非特权)用户标识用户的名称。 例如:

  

userId: 1234
  username: john02
  public name: John Jameson
  email: j.jameson@dev.null

3:正如JasonThe Rook所指出的,一致性似乎是唯一的理由。我觉得这种“最佳实践”可能是过去某个地方的剩余部分,当用户名在系统中实际用于唯一识别用户时。

8 个答案:

答案 0 :(得分:7)

如果您不允许用户更改其用户名,则有些人只会创建新帐户。我没有看到任何安全风险,包括SO的许多应用程序允许您更改您的名字。如果更改名称,请保持userid(主键)相同,以便所有数据都正确链接。

我看到的唯一危险是,您是否可以将您的名称更改为已存在的帐户,例如“admin”。

答案 1 :(得分:6)

从安全方面来看,您可能不希望允许用户更改其名称,这有很多原因。然而,作为一个全面的“从不这样做” - 我不一定同意。但是,允许更改名称会产生相当多的额外工作。如果您打算允许用户更改其身份,则由于以下原因,您必须非常小心。

  1. 维护一致的用户身份。假设你运行了一个留言板,Troll_1就在每个人的阻止列表中。如果Troll_1能够更改他或她的名字,那么所有这些用户过滤器都不合适,并且您有一些不满意的用户。
  2. 除了答案1之外,您还希望保持底层系统的一致性。如果允许用户更改名称,则必须确保检查是否为您,更新该用户正在使用的每个系统,以便他或她不会丢失(或获得)允许他们(或不是)允许的区域的权限。此外,如果用户更改了自己的姓名并且新用户希望使用该名称,则可能会无意中允许新用户访问旧用户的信息/数据/如果您尚未对更新系统进行尽职调查
  3. 根据您拥有的系统类型,允许某人更改其用户名可能会使您的系统从欺诈角度容易受到滥用。你可能会有人来回假装成两个不同的人,试图欺骗某人。一个不知情的受害者可能很容易堕落。 (听起来很愚蠢,我知道,但我看到人们想出了更疯狂的垃圾。)
  4. 无论如何,正如我所说 - 我不相信允许用户更改他们的名字一定是件坏事。但是,它确实为您(开发人员)创造了更多的工作。用户名现在不能是数据库中的唯一ID,用户名现在不一定与某人有关(因为它们可以在以后更改),因此您必须使用不同的系统来表达“唯一性”。

答案 2 :(得分:4)

我不同意这个前提。有很多大牌网站可以让您更改用户名; eBay是第一个浮现在脑海中的人。

编辑:

现在我想到了这一点,并阅读了Rook的回答,我记得我曾经在那里工作的地方,你无法使用已存在的用户名创建帐户,但你可以随时更改它(稍后,在注册后)已存在的用户名。不幸的是,在所说的地方,权限基于用户名...你可以看到安全问题所在。

答案 3 :(得分:2)

安全性可能有差异,也可能不差,但如果用户ID基于用户名,则可能会令人尴尬。例如,想想一个用户简史密斯(与史密斯先生结婚)离婚并希望恢复到她的婚前姓名。每次她登录你的系统时,它都在提醒她是什么。

现在您可以创建一个新帐户,并将任何配置移动到该新帐户。或者您可以使用除用户名之外的其他内容,以便可以更改用户/登录ID,但是这会映射到一些不变的其他ID - 如序列号或类似的东西。

您需要拥有一些不变的ID - 至少是因为目标系统执行的任何审核都已完成。在名称更改上创建新用户(从而提供新的用户ID)会破坏审计链,并要求某人记住“哦,是的,她去年被称为简史密斯”......

答案 4 :(得分:2)

如果您做两件事,保持一致的用户名是完全无关紧要的:拥有一个单独的不可更改的用户ID,并正确地规范化您的数据库。第一个是重要的,因为它意味着你没有使用用户名作为数据库密钥(或任何其他权限或类似的东西,因此躲避其他海报带来的许多问题)。第二个很重要,因为它可以防止Jason之类的类似欺诈的攻击,因为当您更改用户名时,它会在所有旧帖子和其他任何显示位置上发生变化。

如果您有一个单独的显示名称,我认为没有理由为什么这么重要,用户名仍然可以更改而没有任何安全问题。您可能希望保留过去用户名的记录,这样,如果有人通过电子邮件向您发送有关丢失/黑客入侵的帐户,您可以找到它,如jumpdart所述。但当然,出于同样的原因,您已经跟踪过去与该帐户关联的电子邮件地址,对吧? :)我说让它们变得多变。额外的努力可以忽略不计,并且有许多合法用途。

答案 5 :(得分:2)

如果允许用户切换到过去使用过的名称,则会出现问题。如果总是使用一些永远不会改变也不会被重用的标识符来识别用户,那么如果所有事务都记录了执行事务的用户的身份和当时的用户名,则可以从UI的角度安全合理地使用用户名。交易已经完成。在这种情况下,像消息板帖子这样的东西可以标记为“By:SuperCat(作为Mighty Kitty)”。 Supercat将是海报的当前用户名,Mighty Kitty将是海报在撰写帖子时的用户名。

答案 6 :(得分:0)

我会说无法更改名称对于安全性来说是不好的。特别是当登录是电子邮件地址时。蒸汽就是一个很好的例子...... 5年前,当他们在高中时,他们用lastfantazy7rocks@yahoo.com电子邮件签约。现在,他们必须继续记住该电子邮件,记住Steam和电子邮件密码,确保没有人可以访问电子邮件等...即使他们多年没有使用电子邮件帐户。基本上它减少了实际检查登录电子邮件的可能性,这使得“忘记密码”电子邮件等安全性降低。

如果游戏等真实价值物品与该帐户相关联,您就不能创建新帐户。你的名字终其一生。

答案 7 :(得分:0)

很多答案。你现在可能已经解决了。这是我的2美分:

不要让人们改名字。不是为了安全或任何事情,而是因为它可能反映在您的网站上。人们将用户视为xxx并且他们改变为yyy,然后他们的声誉也会消失。滥用的用户只会不断变化来困扰你的系统。

URL索引:如果您被编入索引 - www.somewhere.com/user/awesomeGuy然后awesomeGuy将名称更改为stupidGuy,那么您将丢失索引结果,并且当谷歌蜘蛛抓取网站时会出现404错误或某些错误。拥有用户名URL比让人们更改用户名更有益处。现在,当人们注册网站时,在“必须拥有”列表中更改用户名的能力并不高。

时间:你的时间比编写像这样无用的功能更重要。

只是我的观点。但是没有安全风险,除非你不清理输入。