在使用nodejs表达时,是否可以防止所有不是来自托管域的curl请求?

时间:2016-10-26 21:35:53

标签: node.js security express curl

我有一个注册终点。

如果有人发现了它,他们可以使用cUrl将垃圾注册发送到我的数据库中。

是否可以阻止所有不是来自www.mydomain.com的cUrl请求,所以我不必担心会创建恶意帐户?

注意我在ubuntu上使用nginx,在/etc/nginx/sites-available/default下设置

location / { #save origin ip address proxy_set_header X-Forwarded-For $remote_addr; #... }

在我的终点我有

app.get('/api/register',function(req,res) { var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress; console.log(ip);

但是控制台总是记录我的主机IP地址,无论我是从我的托管网站发送请求(使用html和表格),还是我在家里从我的电脑发送cURL请求。

我也尝试过修补

app.enable('trust proxy')

来自Express.js: how to get remote client address

1 个答案:

答案 0 :(得分:1)

通过查看Web客户端应用程序的来源或网络流量,可以轻松发现注册API,因此不应将其视为秘密。

X-Forwarded-For标头将提供查询在从浏览器到API的路上遍历的任何代理的名称/ IP,它不会提供表单从何处加载的指示(在测试期间)你获得服务器的IP,因为这是你的nginx反向代理设置的地方)。显示客户端代码加载位置的标题是Referrer标题,这些标题很容易被欺骗,并且没有太多的安全控制。您可以使用会话来检查API是否来自之前已加载代码的用户,但这又可以在您的应用外部轻松重现。

因此,要回答您的问题:不,无法确保对您的API的HTTP请求仅来自您的客户端代码。在某种程度上,它是API的优点,因此任何人都可以实现客户端。

避免滥用未经身份验证的API调用(例如您尝试保护的“注册”)的一种方法是实施CAPTCHA质询,其解决方案是API调用的参数,并且您确保使用足够复杂的CAPTCHA算法请求无法自动创建大量用户,这是您试图防范的威胁。