如何将用户代理字符串列入白名单?

如何将用户代理字符串列入白名单?

我正在尝试将 Nginx 中非常具体的用户代理字符串列入白名单。以下示例演示了如何将一般类型的浏览器(例如 mozilla 或 chrome)列入白名单,但我想要列入白名单的字符串/(破坏了 nginx 配置。

如何将 Nginx 的用户代理列入白名单?

https://gist.github.com/supairish/2951524

https://www.scalescale.com/tips/nginx/block-user-agents-nginx/

https ://www.cyberciti.biz/faq/nginx-if-conditional-http_user_agent-requests/

https ://stackoverflow.com/questions/17674293/allow-only-one-user-agent-block-the-rest-in-nginx

是否可以将以下字符串列入白名单?

if ($http_user_agent ~* (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36) ) {
return 403;
}

答案1

正则表达式包含嵌入空格,因此应将其括起来。括号和句点在正则表达式中具有特殊含义,应使用反斜杠进行转义。正斜杠也可以。

"\(Mozilla/5\.0 \(Windows NT 10\.0; Win64; x64\) AppleWebKit/537\.36 \(KHTML, like Gecko\) Chrome/58\.0\.3029\.110 Safari/537\.36\)"

如果这是要测试的整个字符串,则可以避免使用转义的正则表达式,而改用=带引号的字符串:

if ($http_user_agent = "..." ) { return 403; }

这个文件了解更多信息。

顺便说一句,如果您是白名单,则测试应该是!~*!=拒绝不匹配的字符串。

相关内容