首页 > 解决方案 > NodeJS表单垃圾邮件预防

问题描述

有什么方法可以防止表单上的垃圾邮件吗?我有一个网站并使用 python(请求库)向 500 多个请求发送垃圾邮件,有没有办法防止这种情况?顺便说一句,人们可以更改他们的用户代理并使用代理发送垃圾邮件。有什么我可以使用的小技术或任何 npm 包(找不到任何对我有用的东西)。

这是我的帖子路线,我删除了查询。

app.post('/:id', function(req, res){
    if(req.method == 'POST') {
        var id = req.params.id;
        if(isNaN(id) == false) {
            db.query('SELECT * FROM users WHERE id = "'+id+'"', function(loggerErr, logger) {
                if(!loggerErr) {
                    db.query(, function(logErr, logRes) {
                        if(!logErr) {
                            res.redirect('/');
                        } else {
                            throw logErr
                        }
                    })
                } 
            })
        } else {
            db.query(, function(logErr, logRes) {
                if(!logErr) {
                    res.redirect('/');
                } else {
                    throw logErr
                }
            })
        }
    }
});

标签: node.jsspam-prevention

解决方案


只有 500 个垃圾帖子?不错。许多网站获得数以万计。这是一个大麻烦。网络爬虫....

在您的服务器代码中阻止这些帖子非常困难。

减慢垃圾邮件发布速度的最佳方法是将验证码(“我不是机器人”)合并到您网页上的发布表单中。

Google 提供他们的reCAPTCHA服务。这对 Google 的标准理由是有好处的:它会收集每个使用它的网站的数据,并列出要拒绝的知名垃圾邮件发送者。

还有其他方法。一种是要求所有 POST 用户首先使用电子邮件和密码进行注册,然后要求他们通过回复您发送给他们的电子邮件来完成注册。但这比快速修复post()路线更重要。

编辑在开发中,您知道您和您的测试人员将哪些 IP 地址用于他们的浏览器。所以做这样的事情,使用你自己的 IP 地址,而不是这个例子中的那些。

const ipWhitelist = ['10.11.12.13', '10.12.14.16', '192.168.123.124']
...

然后在您的post()方法的顶部执行此操作。

if (!ipWhitelist.includes(req.connection.remoteAddress)) 
   throw new Error('ip not in whitelist, begone cybercreep!)

但很明显,你需要在发布前把它拿出来。


推荐阅读