security - 删除 nginx 反向代理中的特定 cookie

标签 security nginx cookies

我有一个 nginx作为将我的请求代理到不同目的地的反向代理。客户端发送不同到 nginx .我想删除我的一个位置的特定 cookie。例如,如果客户端发送 cookie A 和 B,我想发送一个表单给 /api .
我怎样才能做到这一点?

最佳答案

假设您正在使用 proxy_pass指令和您的 cookie 名称是 my_cookie ,您可以从 Cookie 中剪切此 cookie 及其值这样的 HTTP header :

location /api {

    # save original "Cookie" header value
    set $altered_cookie $http_cookie;

    # check if the "my_cookie" cookie is present
    if ($http_cookie ~ '(.*)(^|;\s)my_cookie=("[^"]*"|[^\s]*[^;]?)(\2|$|;$)(?:;\s)?(.*)') {
        # cut "my_cookie" cookie from the string
        set $altered_cookie $1$4$5;
    }

    # hide original "Cookie" header
    proxy_hide_header Cookie;

    # set "Cookie" header to the new value
    proxy_set_header  Cookie $altered_cookie;

    ... # other proxy settings here

    proxy_pass <upstream>; # change to your upstream server
}
这个复杂的正则表达式允许检查 my_cookie cookie 存在于 Cookie 的开头、中间或结尾 header 值。这里有几个例子展示了这个正则表达式如何在不同的字符串上工作:
Whole "Cookie" string                                          $1                      $2      $3            $4      $5                       $1$4$5
-----------------------------------------------------------    --------------------    ----    ----------    ----    ---------------------    -----------------------------------------
"some_cookie=value1; my_cookie=value2; other_cookie=value3"    "some_cookie=value1"    "; "    "value2"      "; "    "other_cookie=value3"    "some_cookie=value1; other_cookie=value3"
"some_cookie=value1; my_cookie=value2"                         "some_cookie=value1"    "; "    "value2"      ""      ""                       "some_cookie=value1"
"my_cookie=value2; other_cookie=value3"                        ""                      ""      "value2; "    ""      "other_cookie=value3"    "other_cookie=value3"
"my_cookie=value2"                                             ""                      ""      "value2"      ""      ""                       ""
对于那些正在寻找相同食谱但使用 fastcgi_pass 的人而不是 proxy_pass - 使用 fastcgi_param HTTP_COOKIE $altered_cookie if_not_empty;而不是 proxy_hide_headerproxy_set_header指令。

关于security - 删除 nginx 反向代理中的特定 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67548886/

相关文章:

linux - 在Nginx上服务外部文件

python - 从 QNetworkCookie、PyQt4 打印 cookie

javascript - 主要浏览器允许的 cookie 数量和大小是多少?

java - Spring 安全 : how to implement Brute Force Detection (BFD)?

security - 为什么默认情况下 Bluehost 中有一个从 www/to public_html/的符号链接(symbolic link)?

sql-server - 如何在 SQL Server 2005 中限制失败的登录?

php - 如何使用网站和PHP运行Docker容器?

ruby-on-rails - 如何配置 nginx 以在域中安装 Rails 应用程序并在/blog/中安装 WordPress?

javascript - jquery:检查窗口是否已滚动一次并执行某些操作

Spring安全和特殊字符