忽略所有 URL 参数以加强安全性。怎么做?

忽略所有 URL 参数以加强安全性。怎么做?

任何人只要将 NGINX 服务器放在线上,并在access.log一周后查看它,就会发现有大量的 URL 漏洞被尝试利用。每天,任何时候。

那么如果我要拒绝所有 URL 参数会怎么样呢?如果每个查询字符串都用 NGINX 屏蔽,rewrite而 NGINX 无法匹配任何未定义为rewrite自然返回 404 Not Found 的内容会怎么样?

或者按顺序将一系列重写放置在这个始终存在的位置块内?

location / {
  rewrite "^/api/v1/users/?$" /api/v1/Users.php last;
  rewrite "^/api/v1/users/(all|active|inactive)?$" /api/v1/Users.php?status=$1 last;
  rewrite "^/api/v1/users/(\d+)/?$" /api/v1/Users.php?userId=$1 last;
}

# URL Match examples...

http://localhost/api/v1/users
http://localhost/api/v1/users/

http://localhost/api/v1/users/all
http://localhost/api/v1/users/active
http://localhost/api/v1/users/inactive

http://localhost/api/v1/users/2001
http://localhost/api/v1/users/2002
http://localhost/api/v1/users/2003

有没有办法让 NGINX 忽略 URL 参数?如果这个问题很幼稚,请随时告诉我。也许我问错了问题。

答案1

而是使用return而不是rewrite因为“重写指令只能返回代码 301 或 302”为此,创建一个location带有正则表达式的来捕获特定的请求 uri。

如果你只是想放弃所有这些请求,请返回http 状态 444

例子:

server {
    # ...
    location ~* ^/api/v1/users/.*$ {
        return  444;
    }
}

相关内容