我应该使用 403、404 还是 444 来阻止 nginx 级别的 API 端点



我想在nginx级别阻止一些API端点。我使用

server {
    listen 443;
    ssl on;
    ssl_certificate /app/cert.pem;
    ssl_certificate_key /app/key.pem;
    location = /this_api_path_should_be_blocked {
        return 444;
    }
    location / {
        proxy_pass http://localhost:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

我想知道,对于安全最佳实践,要返回的良好错误代码是什么。应该是

  • 403 禁止的错误
  • 404 未找到错误
  • 444 连接关闭无响应

我建议使用与您的 API 行为最匹配的状态代码,最后返回的代码/消息是为了更好地了解发生了什么,不会影响 API 本身的安全性。

在您的示例中,如果路径被阻止,您可能可以使用nginx访问模块添加一些允许/拒绝策略,默认情况下这将返回403 Forbidden

如果您想返回自定义444您可以执行以下操作:

location = /this_api_path_should_be_blocked {
    allow 10.0.0.0/16;
    deny all;
    error_page 403 =444 /444.html;
}

如果路径需要一些授权,在这种情况下你可以坚持使用状态代码403 Forbidden这是有意义的,即使是一些API的返回404,如Github,例如 https://developer.github.com/v3/#authentication

适合操作的

如果尝试阻止/this_api_path_should_be_blocked未经授权的呼叫,则应返回 403:禁止访问,因为这会通知用户该路径存在,并且不允许他们访问它。他们应该登录吗?他们是否应该有一个令牌来证明他们是授权用户?

如果用户调用根本不存在的路径,则应返回 404: 未找到响应。这应该是对所有未定义调用的默认响应。

最新更新