前段时间,我被用作垃圾邮件的攻击媒介。
当时我刚刚开设了一个新的网站,在那里我托管了一个课程列表。
每个课程都有一个等待名单的注册表,我要求填写姓名和电子邮件,所以当我推出你注册的课程时,你会收到我的电子邮件。
这是一个双重选择的名单。当你注册时,你会在真正进入名单之前收到一封确认邮件。
双重选择是一个很好的方法,可以避免在你的名单中出现不打算订阅的人。如果有人来到我的网站,并输入了其他人的电子邮件,他们会收到确认电子邮件(我无法阻止),但至少在他们确认他们不在名单中。
这也是避免垃圾邮件和抱怨的好办法(我不知道人们是如何处理单一选择列表的,TBH)。
在这封确认邮件中,我是用名字来问候对方的。就像这样。
Hi <NAME>, please confirm your email by clicking here: <LINK TO CONFIRM>
我有一个类似的格式已经很多年了。我在被攻击后意识到的是,任何人都可以去在name 字段中输入任何信息,而在email 字段中输入别人的电子邮件。这样一来,我就向电子邮件发送了一条信息,其中有他们想要的任何信息。
现在,那条信息以一种奇怪的方式被嵌入到电子邮件里面,当然还有转义和HTML清理。
但它仍然是一个垃圾邮件的载体。
再加上我忘了添加验证码,一个恶意的机器人就能通过这个表单发送大量的电子邮件,直到我(和AWS)注意到,并停止了这个过程。
我注意到了,因为我收到了多个奇怪的自动电子邮件回复。然后我检查了DigitalOcean服务器的分析,它有一个非常高的网络和CPU活动,非常不寻常。
最初我只是关闭了服务器,因为我不确定发生了什么。我讨厌服务器,我过去曾多次被黑客攻击,尽管你能想到、读到和实施所有的安全措施,但我的想法是,如果有人极力想侵犯你的服务器,他们会的。
毕竟,所有的大公司都以这种或那种方式被黑过,数据被盗过,等等等等。
除非我成为一个安全专家,否则我怎么能考虑保护服务器呢?现在没有办法了。我也不关心。这应该是一个实施细节,但它却很容易造成重大破坏。
这就是为什么我的第一偏好是创建静态网站的原因之一。2号偏好是无服务器,例如Next.js和Vercel。第三是像Heroku这样的PAAS。
任何由别人管理的东西。如果能帮助我解决这个问题,我也很乐意为此付费。
VPS对我来说是最后的选择,但有时你无法避免。当然,这也有助于减少成本。
由于我的列表服务器是在VPS上,我立即认为它被黑了。但事实并非如此。这只是一个垃圾邮件机器人对我的电子邮件注册表进行了成千上万次的攻击。
这是超级糟糕的,但至少解决方法很简单,只需两分钟就能实现ReCaptcha。有了它,机器人在解决验证码之前无法提交,这是一件非常困难的事情,除非机器人非常复杂(谷歌一直在改进他们的ReCaptcha实施,以打击机器人)。
吸取的教训:总是添加一个验证码。