首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递敏感数据

传递敏感数据
EN

Stack Overflow用户
提问于 2020-07-21 08:39:11
回答 1查看 32关注 0票数 0

Teachers可以访问它们的Student类的列表。在此页面(每个Student一个页面)上,如果学生完成了该课程,Teachers可以将复选框标记为completed。这是通过ajax完成的。我通过在checkbox上将当前的Students id设为一个值来传递它。这并不好,因为恶意Teacher可能会检查页面并更改复选框元素中的Students id (因此,它们可能位于Student 111的页面上,并将复选框中的字段更改为112,并将其他Student的类标记为完成)。

我怎样才能阻止他们这样做?我知道我可以通过POST或使用令牌来获取当前用户的数据,但是其复选框被更改的Student不是当前用户,当前用户是一个Teacher,他正在对他的一个Students进行更改。url是这样的:/website/teacher/student111/classes/

代码语言:javascript
复制
def post_form_api(request):
    data = {}

    if request.method == "POST":
        class_id = request.POST.get("class_id")
        student_id = request.POST.get("student_id")

        student_class_data_entry = get_object_or_404(StudentClassData, student_id=student_id, class_id=class_id)

        form = StudentClassDataForm(request.POST, instance=student_class_data_entry)
        
        [.. other logic .]

        if form.is_valid():
            form.save()
            data = {'result' : True}

        if request.is_ajax():
            return JsonResponse(data)
        else:
            return HttpResponseBadRequest()

(value说哪些学生的课程被改变了)

代码语言:javascript
复制
<form>
    {% csrf_token %}
    <td class='class_complete' student_id='{{ student.student.id }}' name='completed' value='{{ class.id }}'>{{ item.completed }}</td>
</form>
代码语言:javascript
复制
$(".class_complete").click(function(e){
    var csrfToken = $("input[name='csrfmiddlewaretoken']");
    class_id = $(this).attr('value');
    student_id = $(this).attr('student_id');

    var checked = $('#'+e.target.id).is(":checked");

    $.ajax({ url: "/api/post_form/",
        type: "POST",
        dataType: "json",
        data: {'completed':checked, 'student_id':student_id, 'class_id':class_id, 'csrfmiddlewaretoken':csrfToken.val()},
        cache: false
    }).done(function(data) {
        if (data.result === true){
        }
        else {
        }
    });
});

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-07-21 09:27:20

有很多方法可以做到这一点。一种方法是将表单字段设置为“secret_key”、“student_name”和“student_id”的哈希值。那么它看起来就像是不透明的东西,比如:

代码语言:javascript
复制
<td class='class_complete' user_hash='wkfjr8fjsf8je8jfkokjl' name='completed' value='1235'>completed</td>

在后端,您可以解密散列,并确保student_id与'student_name‘匹配

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63005737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档