如何匹配nginx中包含大于号(<)的请求?

时间:2018-10-12 08:21:37

标签: nginx

我正在尝试加强后端服务器的安全性,nginx充当该后端服务器的反向代理,以抵抗XSS和HTML注入攻击。我希望能够简单地对任何包含'<'或'>'的请求做出400错误的响应,作为请求的一部分或查询字符串(例如,/ LookupPrice?name = <“ haarsy%0A> )。我尝试了以下操作(针对query_string),但请求仍通过:

if ($query_string ~* <){
      return 400;
}

我需要做什么?

1 个答案:

答案 0 :(得分:1)

请求URI是按百分比编码的,因此<>通常被编码为%3C和%3E(尽管它们在RFC3986中未作为保留字符列出)。当构造标准化的URI变量$uri时,Nginx会将字符解码为URI部分。但是查询字符串仍然按百分比编码。

要匹配查询字符串中的<>,无论是否已百分比编码,请使用:

if ($query_string ~* (%3[CE]|[<>])) { return 400; }