我有一个注册终点。
如果有人发现了它,他们可以使用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')
答案 0 :(得分:1)
通过查看Web客户端应用程序的来源或网络流量,可以轻松发现注册API,因此不应将其视为秘密。
X-Forwarded-For
标头将提供查询在从浏览器到API的路上遍历的任何代理的名称/ IP,它不会提供表单从何处加载的指示(在测试期间)你获得服务器的IP,因为这是你的nginx反向代理设置的地方)。显示客户端代码加载位置的标题是Referrer
标题,这些标题很容易被欺骗,并且没有太多的安全控制。您可以使用会话来检查API是否来自之前已加载代码的用户,但这又可以在您的应用外部轻松重现。
因此,要回答您的问题:不,无法确保对您的API的HTTP请求仅来自您的客户端代码。在某种程度上,它是API的优点,因此任何人都可以实现客户端。
避免滥用未经身份验证的API调用(例如您尝试保护的“注册”)的一种方法是实施CAPTCHA质询,其解决方案是API调用的参数,并且您确保使用足够复杂的CAPTCHA算法请求无法自动创建大量用户,这是您试图防范的威胁。