私は本当に C# に慣れていないので、現在、学校で使用するためにこの LAN メッセンジャーに取り組んでいます。インターネットで見つけたサーバーとクライアントを含むメッセンジャー自体のコードなので、自分ですべてをプログラムしていません。メッセージの送受信など、非常に基本的なコードがコピーされています。いずれかの方法!チャットをスパムする人々に問題があります。クライアントには、すべての受信メッセージ用の複数行のテキスト ボックス、メッセージを書き込むためのテキスト ボックス、およびメッセージ自体を送信するための送信ボタンだけでなく、接続オプションも含まれています。人々がチャット クライアントを「スパム」するのを止める方法はありますか? たとえば、ユーザーが 2 秒間に 5 件のメッセージを送信した場合、「メッセージの送信」テキストボックスをロックします。これはどのように行うことができますか?スパム ユーザーがそれ以上メッセージを送信できないようにする限り、テキスト ボックスをロックする必要はありません。
2 に答える
The first thing to consider is never trust a client. This means that anyone that has access to your source code, or even knows the protocols that the server uses, can write their own client that sends spam messages all day long.
Assuming the spam is just coming from people using the client you provide, you can certainly count the number of messages sent in a given timeframe and disable the Send button if a threshold is exceeded.
Assuming this is using WinForms, the code to block the button would be something like:
btnSend.Enabled = false;
To keep track of the number of messages sent in recent history, you could create something like
List<DateTime> messageTimestamps;
and put timestamps in there.
When someone sends a message, do this:
- Remove all entries from the list that are more than (say) 2 seconds old
- Add the new entry to the list
- If the list count > (say) 5, disable the Send button and discard this message
At that point you would need to start a timer to clear the blocked state. Have a look at
http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx
to see how that works.
Maybe have a counter count up each time a user sends a message, and if the counter gets to 5, do whatever you want to do to keep the user from sending another message. Then simply reset the counter every 2 seconds with a Timer object.
int spam = 0;
Timer timer = new Timer(2000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
static void timer_Elapsed(object sender, ElapsedEventArgs e)
{
spam = 0;
}
if (spam < 5)
{
//send message as usual
spam++;
}
else
//notify user that sending messages has been disabled, please wait 'x' seconds to send another message