0

假设我在 C# 中创建了一个反馈表单。它将反馈发送到我的 PHP 页面,然后我的 PHP 页面将其添加到我的 MySQL 数据库中。代码:

private void PostFeed(string Params)
{
    using (WebClient wc = new WebClient())
    {
        wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        wc.Headers["Accept"] = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        wc.Headers["Accept-Language"] = @"en-US,en;q=0.5";
        string HtmlResult = wc.UploadString("http://website/feedtest.php", "POST", Params);
        Console.WriteLine(HtmlResult);
    }
}

在我的 PHP 上,我的代码类似于:

$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$desc = $_REQUEST['description'];
connect
post result...
close connection

我的问题是:有没有办法防止洪水?我知道任何人都可以通过连续发送反馈甚至创建每秒发送 1000 个帖子请求的第三方应用程序来发送垃圾邮件/泛滥它。我正在考虑在 PHP 端实现某种检查,例如:如果来自 c# 应用程序的连接密码匹配,则继续,如果不匹配,则退出。

基本上,我不希望人们利用反馈方法向我发送垃圾邮件。

任何人都可以提出一种方法吗?还是我什至不应该担心这个?任何帮助表示赞赏。

4

1 回答 1

0

一种典型的技术是每 X 单位时间限制进行​​某种提交,其中您在表中有一last_submitted_at列与某种标识符相关联。例如,如果您有一个相当强大的用户注册系统,您可能会将其与用户相关联,或者如果您没有,您可能会将其与 IP 相关联。

如果您尝试投票、发帖或作为问题过于频繁,这是 Stack Overflow 使用的系统。它们中的每一个都有一个单独的计时器,它可能会转换为last_X_at数据库中某处的单独列。

如果最后一次小于某个阈值,则显示错误而不是接受提交。

于 2013-01-30T03:56:12.270 回答