我用這個驗證:防止在Django SQL注入形成
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,表單驗證等等。您應該花更多時間閱讀文檔並瞭解該工具。 – cezar