iT邦幫忙

0

Nginx執行指令權限設置並禁止Direct Connection

目前我是這樣設

if ( $args ~* "cmd=" ) {
               return 403;
		}	

這樣雖然能擋網址列的非法點播但是卻會連透過js執行的合法點播也一併擋了
要如何只擋前者而不擋到後者?

可以的話我想在禁止Direct Connection 變成這樣的結構

就只剩這兩個問題了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
froce
iT邦大師 1 級 ‧ 2019-07-07 11:04:01

你應該在應用程式上下功夫,例如同一ip、同一帳號多少時間只能點多少首、api傳回時做認證...等,而不是在nginx上下功夫。

你設

$args ~* "cmd=" 

就只是把所有有cmd的GET request全部擋掉,你得想個辦法讓不管是NGINX還是應用程式,能夠認出你定義的非正常請求,才有可能做到這件事。

看更多先前的回應...收起先前的回應...

emmmm......透過cookie? 在點播時新增auth cookie點播完馬上刪除
然後用nginx的$cookie_name檢查就知道合不合法了

dragonH iT邦超人 5 級 ‧ 2019-07-07 12:05:46 檢舉

我印象中 nginx 的 $cookie

只是用來取值而已

你只依靠取值就能判斷合不合法?/images/emoticon/emoticon16.gif

froce大 的意思應該是要你從你的後端下手

看你用 JWT 之類的東西

然後每次點播就檢查這 token

看是不是合法或合理使用這樣

emm

dragonH iT邦超人 5 級 ‧ 2019-07-07 12:16:42 檢舉

只要被檢查到值不存在就不是用js點的就是非法

不是靠存不存在就能判斷合法的呀...

你不驗證這個你所謂的 認證用的cookie的話

那我在你這 認證用的cookie中

隨便帶個值

依照你上面提到的判斷邏輯

不就是合法請求了

阿要驗證的話通常是透過後端

nginx沒試過

不過就算要透過 nginx 來判斷

也不是只用取值這麼簡單而已

那我在想想其他方法好了

froce iT邦大師 1 級 ‧ 2019-07-07 12:20:05 檢舉

你在nginx一般來說只能檢查 $cookie_name 在不在GET裡,請問你要怎麼確認送出來的 $cookie_name 是合法的?

除非你nginx搭配lua模組然後去寫認證的code啦,不過相信會這樣做的不會問這種問題。

那你有沒有比較可行安全度比較高的解決方案能提供一下?

froce iT邦大師 1 級 ‧ 2019-07-07 12:46:46 檢舉

前面就說過了啊,簡單一點就不要管啥非法外連,多少時間內就只給他多少點播額度,難一點就是弄個token機制。

不管那個方法都是要後端做就是了,在一般沒加模組的NGINX裡是做不起來的。
然後因為不知道你送request是透過什麼送,如過是透過ajax的話是可以在HTTP HEADER檢查出來的,但也是很容易偽造。

剛試著在腦海模擬幾個方案好像不管用哪個nginx都必須要有解密能力

我要發表回答

立即登入回答