gpt4 book ai didi

mysql - 防止 Django 表单中的 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-01 00:00:00 25 4
gpt4 key购买 nike

我用它来验证:

class MyValidationForm(forms.Form):
title = forms.CharField()
body = forms.Textarea()
taxonomy = forms.IntegerField()

这是我基于类的 View :

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 注入(inject)危险吗?...

最佳答案

您误解了 SQL 注入(inject)的意思。 Django 已成功保护您免受此类攻击,字符串 "select * from user where 1=1" 被视为数据,而不是命令,并最终作为数据库中的值。

SQL 注入(inject)攻击改变数据库正在执行的 SQL。成功的攻击会诱使数据库将数据作为命令执行。您最终不会以 select * from user where 1=1 作为值,而是最终让攻击者访问 user 表中的所有结果.

一个典型的错误是没有通过将 SQL 命令构造为字符串来正确转义数据。假设服务器使用以下查询来查找当前用户的数据:

SELECT * FROM user WHERE username='$user_id'

其中 $user_id 来自请求。通常这是一个登录名,比如说

user_id = "zopatista"

所以查询变成

SELECT * FROM user WHERE username='zopatista'

如果服务器不能防止 SQL 注入(inject)攻击,攻击者可以替换 user_id注入(inject)更多 SQL 命令:

user_id = "zopatista' OR 1=1 -- "

所以在简单地将该字符串插入到查询中之后,现在服务器将向数据库发送以下 SQL:

SELECT * FROM user WHERE username='zopatista' OR 1=1 -- '

突然,查询命令的含义发生了变化,数据库将返回所有行,而不仅仅是与登录名匹配的一行。

classic XKCD joke on SQL injection更进一步,注入(inject) SQL 代码删除整个表,而不是尝试访问更多信息。

防止 SQL 注入(inject)的服务器将确保用户提供的数据始终参数化,将数据与查询分开发送到数据库驱动程序,以确保它永远不会被视为查询。

只要您使用 Django 的模型和查询集,您就可以免受 SQL 注入(inject)攻击。如果你混合使用,你只会有风险 extra()RawSQL()使用用户数据而不使用他们的参数特征。

关于mysql - 防止 Django 表单中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46420168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com