【问题标题】:Chat spam auto block for C# chat clientC# 聊天客户端的聊天垃圾邮件自动阻止
【发布时间】:2012-07-21 07:55:28
【问题描述】:

我真的是 C# 新手,所以 目前我正在开发这个局域网信使,供学校使用。 Messenger本身的代码,包括我在互联网上找到的服务器和客户端,所以我自己没有编写所有代码。发送和接收消息的基本代码已被复制。无论如何!我遇到了人们在聊天中发送垃圾邮件的问题。客户端包含连接选项,以及用于所有传入消息的多行文本框、用于编写消息的文本框和用于发送消息本身的发送按钮。有没有办法阻止人们向聊天客户端“发送垃圾邮件”?例如,如果用户在 2 秒内发送了 5 条消息,则锁定“发送消息”文本框。怎么可能做到这一点?它不必锁定文本框,只要它阻止垃圾邮件用户发送更多消息即可。 提前致谢

【问题讨论】:

    标签: c# spam-prevention


    【解决方案1】:

    首先要考虑的是永远不要相信客户。这意味着任何有权访问您的源代码,甚至知道服务器使用的协议的人都可以编写自己的客户端,整天发送垃圾邮件。

    假设垃圾邮件只是来自使用您提供的客户端的人,您当然可以计算在给定时间范围内发送的邮件数量,并在超过阈值时禁用“发送”按钮。

    假设这是使用 WinForms,阻止按钮的代码将类似于:

    btnSend.Enabled = false;
    

    要跟踪最近历史中发送的消息数量,您可以创建类似

    List<DateTime> messageTimestamps;
    

    并在其中放置时间戳。

    当有人发送消息时,请执行以下操作:

    • 从列表中删除所有超过(比如说)2 秒的条目
    • 将新条目添加到列表中
    • 如果列表计数 >(例如)5,请禁用“发送”按钮并丢弃此消息

    此时您需要启动一个计时器来清除阻塞状态。来看看

    http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx

    看看它是如何工作的。

    【讨论】:

      【解决方案2】:

      每次用户发送消息时,可能会有一个计数器计数,如果计数器达到 5,请执行任何您想做的操作以阻止用户发送另一条消息。然后只需使用 Timer 对象每 2 秒重置一次计数器。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2011-01-04
        • 1970-01-01
        相关资源
        最近更新 更多