如果我用Flask接收POST数据,将这些数据放入WTForms表单并成功验证,是否可以避免SQL注入攻击?
我在我的应用程序中使用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中的数据安全问题,但你使用的占位符方法可以避免这种处理的需要。