防止垃圾邮件调用webservice

时间:2015-12-03 11:57:54

标签: jquery asp.net-mvc web-services spam-prevention

我的MVC网站上有一个页面,其中有多个项目,用户可以点击这些项目添加到他们的购物篮中。

点击“添加”后,我执行$ .ajax()命令来调用后端并执行计算,返回结果并更新页面上的价格。

最近发现,快速连续点击许多“添加”按钮意味着用户依次等待每个呼叫进行处理。也就是说,他们点击10'添加'按钮,他们看到价格变化10次。

我不关心用户界面。我 关注的是webservice调用可以被垃圾邮件,这反过来可能会给数据库服务器带来压力,因为每个请求都需要数据库查找和其他计算。

我已经开始像这样设置一个“锁定”标志,以阻止Joe Public多次点击。

var flag=0;

function updateBasket() {
    if (flag = 0) {
        flag = 1; // Processing
        var form = $("#ItemsForm");
        $.ajax({
            url: '@Url.Action("UpdateBasket")',
            data: form.serialize(),
            type: 'POST',
            cache: false,
            success: function (response) {
                // code
            },
            error: function (jqXHR, textStatus, errorThrown) {
                // code
            }
        });
        flag = 0;
    } else {
        // Still processing previous request
        alert('please wait');
    }

HOWEVER 这一定可以通过进入控制台并执行

来规避
flag=0;updateBasket();

我可以在后端做些什么来防止此来电被垃圾邮件?我关心的是我控制的代码,而不是网络基础架构级别。

更新:检查用户的凭据(用户名0是不可能的,因为他们可以在不登录的情况下执行此操作。 如果我在序列化的页面加载中为表单添加了一个唯一值,我可以检查后端是否反对我上次看到它,但所有攻击者都会做的是$('#uniqueValue')。val('newValue );否定这一点。

更新:提醒我控制MVC后端,即调用数据库服务器。这是我认为我可以阻止垃圾邮件调用数据库的地方,但我不知道如何。

1 个答案:

答案 0 :(得分:0)

我会将所有JavaScript与最终用户隔离开来,做这样的事情。

(function () {
    function updateBasket() {
       ...
    }
})();

这样做意味着无法在控制台中调用updateBasket()

这称为自执行匿名函数。这里有一篇很棒的文章:http://markdalgleish.com/2011/03/self-executing-anonymous-functions/