通过在web应用程序中使用散列用户id来防止垃圾邮件发送者


Prevent spammers by using a hashed user id in web applications

我正在构建一个允许用户向其他用户发送消息的web应用程序。在发送消息页面上,我目前在URL中有接收者的用户id,这样应用程序就知道在哪里发送消息,即example.com/send-message/user-id/1。用户id是用于在数据库

中标识接收者的主键。

我担心垃圾邮件发送者可能会进入这个页面,只是不断地更改URL中的用户id,然后很快地向网站上的人们发送垃圾邮件。

我想出的解决方案是制作一个长唯一id(123154123412)。此号码将存储在用户数据库行中,并将用于代替发送消息页面上的主键,以便垃圾邮件发送者不能通过更改id轻松地向许多人发送垃圾邮件。

这个方法有没有什么潜在的问题是我忽视了的?

如果我在整个网站中使用唯一的id,它会显著降低网站的速度吗?换句话说,使用主键搜索数据库比使用生成的唯一id更快吗?

谢谢

你可以做的另一件事是,当会话或ip地址在短时间内发送太多消息时,暂时阻止会话或ip地址。消息间隔1分钟,每15分钟最多5条消息)。

这种方法绝对没用。

只要你的网站允许用户向其他用户发送消息,垃圾邮件发送者就会使用你创建的任何id。

唯一的办法是限制每小时接收人和/或消息的数量。

我想说,允许人们在网站上随意给其他成员发信息通常是一个坏主意(除非这是我认为网站的重点)。你可能会阻止自动的垃圾邮件机器人,但还是有很多人愿意花钱请人来手动发送信息。首先,你应该只允许一个登录的成员向其他以某种方式"接受"该成员的人发送消息——一个朋友,允许消息来自等等。

就使用长UID而言,只要数据库设置正确,唯一的性能"命中"可能是在生成它的时候,但如果使用它来代替主键ID,则不会减慢站点的速度。