django - 插入 Django 网络应用程序中的基本安全漏洞

标签 django python-2.7 security http ssl

我有一个 Django 应用程序,用户聚集在该应用程序上,用作论坛并获得声誉点数。大多数用户属于服务欠缺的社区,并通过低带宽互联网使用带有代理浏览器(如 Opera mini)的原始非 js 功能手机。本质上,我是一个“下一个十亿”数字非营利组织。

用户可以在我的论坛中利用一些安全漏洞 - 我需要有关修复这些漏洞的建议。这是事实。

没有安装 SSL 证书 - 所有通信。通过 HTTP 进行。要在论坛中发帖,请在 django 模板中使用以下代码:

<form action="{% url 'private_group_reply' slug=unique %}" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="hidden" name="unique" value="{{ unique }}">
    <br><span style="color:green;">Image:&nbsp;</span>{{ form.image }}<br>
    <br><span style="color:green;">Comment:</span>{{ form.text }}
    <br>
<input class="button" type="submit" value="OK" id="id_submit">
</form>

unique是一个标识 group 的 uuid评论将张贴在.

相关的 url 模式是:url(r'^group/(?P<slug>[\w.@+-]+)/private/$', auth(PrivateGroupView.as_view()), name='private_group_reply')

在views.py中,相关的基于类的 View 的方法是:

def form_valid(self, form):
    if self.request.user_banned:
        return redirect("profile", slug=self.request.user.username)
    else:
        f = form.save(commit=False)
        text = f.text
        if text == self.request.user.userprofile.previous_retort:
            redirect(self.request.META.get('HTTP_REFERER')+"#sectionJ")
        else:
            self.request.user.userprofile.previous_retort = text
            self.request.user.userprofile.score = self.request.user.userprofile.score + 2
            self.request.user.userprofile.save()
            #print "image: %s" % f.image
            if f.image:
                image_file = clean_image_file(f.image)
                if image_file:
                    f.image = image_file
                else:
                    f.image = None
            else: 
                f.image = None
            #print "image:%s" % f.image
            which_group = Group.objects.get(unique=self.request.POST.get("unique"))
            reply = Reply.objects.create(writer=self.request.user, which_group=which_group, text=text, image=f.image)
            GroupSeen.objects.create(seen_user= self.request.user,which_reply=reply)
            try:
                return redirect(self.request.META.get('HTTP_REFERER')+"#sectionJ")
            except:
                return redirect("private_group_reply", slug=reply.which_group.unique)

我认为,一个特定的用户正在运行一个脚 native 器人并淹没他所属的组,获得多个积分(每个帖子都是积分激励)。

虽然我是软件开发的新手,但我现在在这个论坛上拥有一个蓬勃发展的社区,因此我的技能得到了提升。我一直在阅读大量有关 SSL 安全性的书籍,以及任何受人尊敬的网络应用程序都应遵循的经验法则。目前有人可以提供帮助的是我所描述的泛滥用户的这种特殊情况,以及如何在我的设置中减少此类行为。此外,我们也将非常感谢您遵循的任何一般准则。

在此先致谢,如需任何信息,请询问。

最佳答案

我不确定它是否是您正在寻找的答案,但与其尝试修补代码的这一部分,您可能需要考虑在您的网站上创建一些规则/条例以及 对违反此规定的用户进行处罚。

如果您可以证明某个用户的行为违反了您的规则/指南,您将应用您设置的惩罚(分数回滚/禁令/其他),这将消除大多数人尝试的动机这样做。

是的,ssl 可能会有所帮助,但谁知道呢,您的用户将始终有机会绕过您的保护措施。

就实际代码而言?在完成其他所有操作之前,我不会将分数保存到模型中。如果保存时出现问题,您可能还希望将其设为原子事务以回滚数据库更改

关于django - 插入 Django 网络应用程序中的基本安全漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35132605/

相关文章:

python - 在djangorest框架中访问用户

Django:使用多个嵌套数组过滤 JSONField

python - 尝试用 Python 编写 Eratosthenes Sieve。这是正确的吗?我怎样才能让它更快?

python - 从记录 ndarray 中选择行范围

php - 如何使用 PHP 检测安全连接 (https)?

php - MySql 半动态表名

django - 通过 Django 后端和 Angular 前端删除 MongoDB 集合中的所有文档

python - 在 Django 中为每个模型设置数据库

python-2.7 - 请求模块中的 Python 错误 "Connection reset by peer"

apache - 将 HTTP 重定向到 HTTPS 或拒绝使用 HTTP?