2

我正在使用 jQuery 在用户注册期间进行一些内联​​表单验证,以通过检查以下内容来防止发布后出现表单错误:

  • 用户名可用
  • 电子邮件尚未注册

这个想法是在提交表单之前给用户反馈以防止挫败感。代码在底部。

问题:

  • 这是一个潜在的安全问题吗?我认为查看我的 javascript 的人可以找到我正在轮询的用户名/电子邮件确认的 url,然后自己使用它(我不知道他们为什么会这样做,但永远不知道)。
  • 如果是,我可以实施哪些保护措施?我读过一些关于跨站点脚本保护的内容,但不确定如何在 AJAX 请求中实现它,例如这个,或者是否有必要。

感谢您的输入。

当前代码:

我已经定义了以下视图(我从一些片段中获取,但不记得在哪里):

def is_field_available(request):
    if request.method == "GET":
        get = request.GET.copy()
        if get.has_key('username'):
            name = get['username']
            if User.objects.filter(username__iexact=name) or \
                UserProfile.objects.filter(display_name__iexact=name):
                return HttpResponse(False)
            else:
                return HttpResponse(True)
        if get.has_key('email'):
            email = get['email']
            if User.objects.filter(email__iexact=email):
                return HttpResponse(False)
            else:
                return HttpResponse(True)

    return HttpResponseServerError("Requires username or email to test")

下面是一个 jQuery 代码示例:

$.get('is-user-name-available/', { email: $(this).val() },
    function(data, status){
        if(data == "True"){
            $input.fieldValid();
        } else {
            $input.fieldInvalid("This email address has already been registered.  Try another or recover your password.");
        }
});

编辑:更新了代码并改写了我的问题。[ 2009 年 10 月 7 日]

4

2 回答 2

2

请参阅http://www.djangosnippets.org/snippets/771/ - 您可以将视图限制为 ajax 请求。执行跨域 ajax 的唯一方法是jsonp,您认为它不支持。

于 2009-10-08T18:45:57.140 回答
1

是的,这是一个潜在的安全问题,但不是太大:只要确保你的代码是安全的,并且总是返回一些不会泄露应该隐藏的信息的东西。

如果有人在浏览器中输入没有什么不好:example.com/account/verify_username/?username=admin(虽然我建议只在这里使用 POST)

那么应该做什么:1)验证是否有您需要的所有参数并且它们的格式正确 2)可能验证请求来自哪里 3)确保您处理代码中可能发生的所有异常 4)不要不要忘记单元测试——因为尝试将你的逻辑放在视图中,而不是在某些方法中:)

于 2009-10-08T18:54:30.477 回答