2012-01-30 8 views
5

Estoy usando Flask, WTForms y la biblioteca OurSQL MySQL para mi aplicación. Recibo datos de publicación de la variable request.form. Lo puse en un objeto de formulario WTForms. Llamo al validate() en ese formulario, y luego inserto los datos del formulario en una base de datos MySQL usando OurSQL.Si recibo datos de publicaciones con Flask, coloque esos datos en un formulario WTForms y lo valida con éxito, ¿está a salvo de ataques de inyección de SQL?

Sin realizar ningún procesamiento adicional, ¿estoy a salvo de la inyección de SQL? ¿Se escapa el método WTForms validate? Si no, ¿qué debo hacer para escapar de los datos? Un ejemplo de lo que estoy haciendo tiene este aspecto:

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)) 

Respuesta

5

Por lo que yo sé, ni WTForms ni Frasco escapar los datos de SQL, pero utilizando marcadores de posición que estás haciendo no elimina la necesidad de escapar.

2

La validación de formulario y SQL son preocupaciones separadas. El trabajo de validación de formularios es asegurarse de que los datos tengan sentido. El trabajo del código SQL es almacenar los datos de forma segura. Los ataques de inyección SQL son básicamente ataques al código relacionado con SQL. El fragmento que proporcionó, utilizando los marcadores de posición cursor.execute y ?, hará una cita correcta antes de enviar datos a SQL, por lo que no hay posibilidad de una inyección SQL.

Cuestiones relacionadas