簡體   English   中英

如何防止人們從檢查器中使 socket node.js 服務器過載?

[英]How do I prevent people from overloading a socket node.js server from inspector?

我制作了一個網站,可以計算用戶單擊按鈕時的總點擊次數。 當一個按鈕被點擊時,它會向服務器發出一個“按下”,將 clicks 變量增加 1。但是,人們可以進入檢查器並鍵入一個 for 循環,如

for(var i =0; i <10000; i++){
    socket.emit('Press');
} 

它只會弄亂計數。 有沒有辦法防止這種情況?

TL; DR:你不能。 您可以停止或減慢它們的速度,但總會有解決方法。

長(er)回答:有幾種方法可以防止人們做這樣的事情。 盡管有一些方法可以解決它們,但它們可能會奏效。 第一個是debugger循環。 這些不適用於所有瀏覽器,但會停止執行任何代碼,直到您手動繼續。 它們可能看起來像這樣,只是位於您已經有重復內容的位置:

 while (true) { debugger; }

另一種方法是將所有代碼隱藏在函數(可能是 IIFE)中。 這使得它無法從window對象訪問。

 (function() { console.log("I'm hidden!"); })();

您還可以混淆或縮小代碼以使其更難理解。

所有這些方法都可以繞過。 如果控制台未打開, debugger循環將不起作用。 由於您可以通過其他方式執行 JavaScript,因此這並不總是有效。 瀏覽器擴展可以替換您的腳本,並使window對象上的任何內容都可用。 而混淆只會讓人們慢下來。

但是:您還沒有成為 XY 問題的受害者。 你問的是問題,而不是解決方案。 因此,您可以在服務器端實現您的目標。 如果您太快收到太多消息,只需切斷連接即可。 只要確保您不會意外關閉良性連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM