分析Django模板代码

时间:2016-03-01 16:34:33

标签: django security nginx

我需要一些概念的帮助。

在我的Django网络应用程序中,用户编写内容和其他用户upvote / downvote上述内容。标准的东西。

投票用于通过POST发生。例如。类似于此的东西:

<form  method="POST" action="{% url 'vote' %}" class="vote_form">
{% csrf_token %}
<input type="hidden" id="id_link" name="link" class="hidden_id" value="{{ link.pk }}">
<input type="hidden" id="id_voter" name="voter" class="hidden_id" value="{{ user.pk }}">
<input type="hidden" id="id_page" name="section_number" value="{{ forloop.counter }}">  

<input class="voting" type="submit" name="val" value="upvote"><br>
<input class="voting" type="submit" name="val" value="downvote">

</form>

投票现在仅通过以下方式进行:

<a href="{% url 'vote' link.pk user.pk forloop.counter 1 %}">upvote</a><br>
<a href="{% url 'vote' link.pk user.pk forloop.counter 0 %}">downvote</a>

我的两个问题是:

1)其他一切(其他条件不变),这两种方法在安全性方面有什么不同吗?我在我的网站上运行了Wapiti(安全扫描程序);后一种方法突破了几个安全风险(SQL注入,盲注SQL等),而前一种方法完全干净(但是,我确实也改变了一些底层代码)。

2)前一种方法在nginx日志中留下了一个POST日志条目。如何在nginx日志中显示后一种方法? GET?

1 个答案:

答案 0 :(得分:0)

您的代码中没有不安全,但这仍然不能让它成为一个好主意。

通常,您应该避免在GET上执行影响数据库的操作。一个可能的后果是,如果搜索引擎抓取了您的网站,它将遵循投票链接并导致实际注册投票;原始代码不会发生这种情况,因为搜索引擎不会提交表单。