Security 我应该使用403、404或444来阻止nginx级别的API端点吗
我想在nginx级别阻止一些API端点。我用Security 我应该使用403、404或444来阻止nginx级别的API端点吗,security,nginx,Security,Nginx,我想在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 ht
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连接已关闭,无响应
403禁止的
如果要返回自定义444
,可以执行以下操作:
location = /this_api_path_should_be_blocked {
allow 10.0.0.0/16;
deny all;
error_page 403 =444 /444.html;
}
如果是需要某种授权的路径,那么在本例中,您可以坚持使用状态代码
403禁止
,即使是一些API返回404,例如Github,也有意义,无论哪个操作合适
如果您试图阻止未经授权的调用/this\u api\u path\u应该被阻止,那么您应该返回403:probled,因为这会通知用户该路径存在,并且不允许他们访问该路径。他们应该登录吗?他们是否应该随身携带令牌以证明自己是授权用户
如果用户对根本不存在的路径进行调用,则应返回404:notfound响应。这应该是对所有未定义调用的默认响应。我认为状态代码根本不会影响安全性。这取决于您返回的代码-按照您认为合理的方式进行设计,然后在文档中进行描述:)如果您因为请求未经授权(即登录失败)而阻止访问,那么401 Unauthorized应该是您的初始响应,并随附WWW Authenticate标头以解释如何进行身份验证。如果用户已正确验证,但没有访问资源的权限,则其403禁止。我不确定您是否混淆了授权和验证。但在本例中,之所以提供403,是因为用户没有经过身份验证(他们缺少API密钥或其他东西)。如果用户已通过身份验证,但未被授权访问该资源,则应向其提供401。此示例不考虑经过身份验证但未经授权的用户。希望这能澄清问题,因为“未经授权”这个词是个错误的选择。如果你严格遵守标准,那么401是两种情况下的正确答案。401响应必须包括包含身份验证质询的WWW Authenticate标头。事实上,该标准让那些收到401,然后进行身份验证但未经授权,然后又收到另一个401的用户感到困惑,因此许多服务器为经过身份验证但未经授权的用户提供403服务。看到和