【发布时间】:2017-09-26 07:25:20
【问题描述】:
我用它来验证:
class MyValidationForm(forms.Form):
title = forms.CharField()
body = forms.Textarea()
taxonomy = forms.IntegerField()
这是我基于类的视图:
class blog_createpost(dashboardBaseViews):
template_name = "dashboardtems/blog_createpost.html"
model = {}
def post(self, request, *args, **kwargs):
form = MyValidationForm(request.POST)
if not form.is_valid():
return HttpResponse("not valid")
new_data = post(title=request.POST['title'],
body=request.POST['body'],
description=request.POST['description'],
taxonomy=get_object_or_404(taxonomy,
pk=request.POST['taxonomy']),
writer=request.user)
new_data.save()
return HttpResponse("done")
就像你看到的那样,我在这一行检查了我收到的请求验证:if not form.is_valid(): 及其工作,但是当我在表单输入中添加一些 SQL-command 时。它不会阻止在数据库中插入值!..
意味着我在数据库中有一个字段,其中包含一些值,例如select * from user where 1=1!。
它不会导致用户输入的 sql 注入危险吗?...
【问题讨论】:
-
Django 已经保护您免受 SQL 注入攻击。是的,将看起来像 SQL 命令的 data 插入到数据库中,这就是对此类数据的正确响应。成功的 SQL 注入攻击会执行 SQL,而不是将其作为数据插入。
-
注意,使用模型表单的要点之一是您可以通过
form.save()来创建您的帖子对象。无论如何,您应该始终访问form.cleaned_data而不是request.POST。 -
这就是我们使用 Django 等框架的原因。没有必要重新发明轮子。该框架不仅关注 SQL 注入,还关注 XSS、CSRF、表单验证等等。您应该花更多时间阅读文档并了解该工具。
标签: mysql django python-3.x sql-injection django-1.11