如果我用Flask接收POST数据,将这些数据放入WTForms表单并成功验证,是否可以避免SQL注入攻击?

5 投票
2 回答
3149 浏览
提问于 2025-04-17 11:55

我在我的应用程序中使用Flask、WTForms和OurSQL MySQL库。我从request.form这个变量中获取表单提交的数据。然后,我把这些数据放进一个WTForms的表单对象里。我调用validate()方法来验证这个表单,然后使用OurSQL把表单中的数据插入到MySQL数据库中。

如果不做任何额外处理,我这样做安全吗?WTForms的validate方法会自动处理数据吗?如果不会,我该怎么处理这些数据以防止SQL注入?我现在的做法大概是这样的:

form = MyWTFFormsForm(request.form)
if form.validate():
    cursor.execute("INSERT INTO mytable VALUES (?, ?, ?, ?, ?);",
            (form.field1.data, form.field2.data, form.field3.data,
             form.field4.data,
             form.field5.data))

2 个回答

2

表单验证和SQL是两个不同的事情。表单验证的工作是确保用户输入的数据是合理的。而SQL代码的任务是安全地存储这些数据。SQL注入攻击其实就是针对SQL相关代码的攻击。你提供的代码片段,使用了cursor.execute?占位符,这样在把数据发送到SQL之前,会进行正确的处理,所以就不会有SQL注入的风险。

5

据我所知,WTForms和Flask都不会自动处理SQL中的数据安全问题,但你使用的占位符方法可以避免这种处理的需要。

撰写回答