![](/img/trans.png)
[英]Node.js application quits if other server is unreachable. How do I prevent my application from stopping?
[英]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.