2016-01-22 86 views
0

遇到麻煩試圖阻止大量是的試圖阻止類似的惡意請求,nginx的

/shop/?filter_product-categories=232%2C149%2C148%2C71%2C86&query_type_product-categories=or HTTP/1.1 

其中只有字母塊變化微妙的變化要求。我試過使用

location ~ /(.*)([^a-z]*)query_type_product-categories=or(.*) { 
    return 403; 
} 

和幾個不同的變化,但還沒有任何運氣。我承認對nginx來說相當新,任何幫助將不勝感激。

+0

你的正則表達式簡化爲這個'query_type_product-categories =或'。你想匹配什麼? – sln

+0

我想匹配整個事物,同時考慮字母數字部分的潛在差異。只需說我對nginx位置塊中正則表達式的工作原理有點困惑。 – whitewinewobbles

+0

'location'只查看最多但不包括'?'和查詢字符串的URI。您將需要使用邪惡if或map測試'$ arg_'變量。 –

回答

1

添加一個位置塊來處理/shop/ URI,並在頂部有條件return

$arg_變量,包含query_type_product-categories參數,它的前兩個字符進行測試的值:

location = /shop/ { 
    if ($arg_query_type_product-categories ~ ^or) { 
     return 403; 
    } 
    ... 
} 

不知道在發生什麼的...,也許try_files

有關更多信息,請參見this document。並且this要小心if。

+0

真棒謝謝理查德。這絕對讓我朝着正確的方向前進,所以我非常感激。 – whitewinewobbles