有人在我的网站上同时创建了两个相同的帐户。这怎么可能?

时间:2009-09-02 11:50:47

标签: sql database race-condition

我无法相信这一点 - 有人实际上在我的社交网站上使用相同的电子邮件创建了两个帐户,即使有服务器端和客户端验证检查也可以防止这种情况发生。但是,在创建两个帐户时注意到的时间完全相同。

出于某种原因,我怀疑使用表格或任何界面是否可行 - 但是我很想知道这是怎么发生的?任何人有任何想法吗?

7 个答案:

答案 0 :(得分:12)

  

由于某种原因,我怀疑使用表格或任何界面是否可行 - 但是我很想知道这是怎么发生的?任何人都有任何想法!

最有可能的是,你没有跟踪的浏览器双帖。

如果您不希望两个人在您的社交网络中共享一个电子邮件地址,请在UNIQUE字段上设置email约束。

要避免双重帖子,请在网页上的隐藏控件中生成随机字符串,将其保留在列中并将此列UNIQUE设为。

答案 1 :(得分:7)

可能是因为你没有在数据库中处理这个唯一约束, 如果您对数据库中的电子邮件列有唯一约束,那么您就不会遇到这类问题

答案 2 :(得分:4)

您应该在users表的emailusername列设置唯一约束。

答案 3 :(得分:3)

不要依赖客户端验证!这些仅供访客作为信息。始终确保在服务器端完成验证。

我的猜测是,有人使用脚本订阅您的网站作为测试,添加了几十个帐户,用论坛垃圾邮件等填写您的网站。通过添加两个帐户,他们会测试它是多么容易。显然,这很容易。下一次,他们可能会创建一千个帐户并使用它来自动使用垃圾邮件充斥您的系统。祝你好好摆脱这一切。

已提供重要提示:强制使用唯一的电子邮件地址和唯一的用户名。但是,当有人刚订阅您的网站时,请确保他们无法在该网址上创建更多帐户至少半小时。然后你会烦恼这些自动化脚本。

答案 4 :(得分:2)

如果您以某种方式接收双重表单帖子并且您的约束/事务处理未正确完成,则执行此操作非常容易。

双重表单提交(特别是当由javascript触发时)可以在服务器上及时接近。检查您的访问日志文件是否有双重帖子。

答案 5 :(得分:2)

当然,最可能的原因是用户提交了两次表格。

避免这种情况的最佳方法是使用redirect after pos方法。

答案 6 :(得分:1)

我认为在其他帖子之间,你有答案。可能在数据库中的字段上没有唯一的约束,有人双击提交按钮给你一个双重帖子。

优良作法是正确设置数据库约束并根据经验,通常最好在客户端点击(javascript)后立即禁用提交按钮,以防止仍然尝试双击所有内容的用户网络。