2012-01-30 12 views
5

Tôi đang sử dụng Flask, WTForms và thư viện MySQL của MySQL cho ứng dụng của tôi. Tôi nhận được dữ liệu bài đăng từ biến số request.form. Tôi đặt nó vào một đối tượng dạng WTForms. Tôi gọi validate() trên biểu mẫu đó và sau đó chèn dữ liệu biểu mẫu vào cơ sở dữ liệu MySQL bằng cách sử dụng OurSQL.Nếu tôi nhận được dữ liệu bài đăng với Flask, hãy đưa dữ liệu đó vào biểu mẫu WTForms và xác thực thành công, liệu có an toàn với các cuộc tấn công SQL injection không?

Nếu không thực hiện bất kỳ xử lý bổ sung nào, tôi có an toàn với việc tiêm SQL không? Phương pháp WTForms validate có thoát không? Nếu không, tôi nên làm gì để thoát khỏi dữ liệu? Một ví dụ về những gì tôi đang làm trông như sau:

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

Trả lời

5

Theo như tôi biết, không phải WTForms cũng không Flask thoát dữ liệu cho SQL, nhưng sử dụng placeholders như bạn đang làm gì ở đó loại bỏ sự cần để tẩu thoát.

2

Xác thực biểu mẫu và SQL là những mối quan tâm riêng biệt. Công việc xác nhận biểu mẫu là đảm bảo dữ liệu có ý nghĩa. Công việc của mã SQL là lưu trữ dữ liệu một cách an toàn. Các cuộc tấn công SQL injection về cơ bản là các cuộc tấn công vào mã liên quan đến SQL. Đoạn mã bạn đã cung cấp, sử dụng các trình giữ chỗ cursor.execute?, sẽ thực hiện trích dẫn thích hợp trước khi gửi dữ liệu đến SQL, do đó không có khả năng cho phép chèn SQL.