Node.js 在使用nodejs的express中,是否可以阻止所有不来自托管域的curl请求?

Node.js 在使用nodejs的express中,是否可以阻止所有不来自托管域的curl请求?,node.js,security,express,curl,Node.js,Security,Express,Curl,我有一个注册终点 如果有人发现了它,他们可以使用cUrl将垃圾注册发送到我的数据库中 有没有可能阻止所有不是来自www.mydomain.com的cUrl请求,这样我就不必担心恶意帐户被创建了 注意,我在ubuntu上和/etc/nginx/sites available/defaultI set下使用nginx 位置/ { #保存源ip地址 $remote\u addr的代理\u集\u头X转发; #... } 在我的终点我有 app.get('/api/register',函数(req,

我有一个注册终点

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

有没有可能阻止所有不是来自www.mydomain.com的cUrl请求,这样我就不必担心恶意帐户被创建了

注意,我在ubuntu上和
/etc/nginx/sites available/default
I set下使用nginx


位置/
{
#保存源ip地址
$remote\u addr的代理\u集\u头X转发;
#...
}

在我的终点我有


app.get('/api/register',函数(req,res)
{
var ip=req.headers['x-forwarded-for']| | req.connection.remoteAddress;
控制台日志(ip);

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

我还试着修补

app.enable('trust proxy')


可以通过查看web客户端应用程序的源代码或网络流量来发现注册API,因此不应将其视为机密

X-Forwarded-For
标题将提供查询在从浏览器到API的过程中所遍历的任何代理的名称/IP,它不会提供表单加载位置的指示(在测试期间,您将获得服务器的IP,因为您在那里安装了nginx反向代理)。显示从何处加载客户端代码的标题将是
referer
标题,这很容易被欺骗,不太可能是安全控制。您可以使用会话检查API是否来自以前加载过您的代码的用户,但这在您的应用程序外很容易复制

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


一种避免滥用未经验证的API调用(如“注册”)的方法您试图保护的是实施CAPTCHA挑战,其解决方案是API调用的一个参数,使用足够复杂的CAPTCHA算法,您可以确保请求无法自动创建大量用户,而这正是您试图保护的威胁。

为什么投否决票而不给出响应?这是一个主题有广泛的兴趣。我在发布之前做了很多。注册端点是由客户端代码(例如,在客户端浏览器上运行的JS应用程序)调用还是由后端服务器调用?注册端点是由执行表单发布的web浏览器调用