Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Base64 làm phương pháp khử trùng đầu vào của người dùng cho Mysql

Đừng "vệ sinh" đầu vào như một phương tiện để ngăn SQL Injection - sử dụng trình giữ chỗ (hoặc thoát đúng cách) , luôn luôn. Hãy kiên định. Hãy an toàn. Vấn đề đã được giải quyết.

Trường hợp này sẽ "an toàn" do miền giới hạn của base64_encode hàm số. Tuy nhiên ..

thực hành không tốt và lưu trữ các giá trị được mã hóa base64 (để truy vấn được hiển thị có thể hoạt động) mang một số tiêu cực hàm ý khi nó thay đổi thông tin được lưu trữ:nó phá hủy thứ tự của các giá trị, làm cho thông tin không thể tìm kiếm được , yêu cầu một bổ sung bước "mã hóa / giải mã" và thậm chí tiêu thụ thêm không gian - ouch!

Do đó, mặc dù có thể có những trường hợp cụ thể đối với dữ liệu mã hóa base64, nhưng phương pháp này không rất phù hợp như một phương tiện để giảm thiểu SQL Injection .

Sự cố là do truy cập SQL qua giao thức văn bản trong đó lệnh truy vấn / hình dạng và giá trị được trộn lẫn với nhau. Việc sử dụng đúng kỹ thuật thoát (ví dụ: mysql_real_escape_string ) sửa lỗi này bằng cách đảm bảo rằng thông tin được thoát ra để văn bản SQL được phân tích cú pháp như dự định - tuy nhiên, không giống như bước mã hóa base64, nó không thực sự thay đổi thông tin được cung cấp!

này là chính xác những gì trình giữ chỗ cung cấp ! Phần giữ chỗ là the phương pháp tiếp cận đúng cách phổ biến và cần được khuyến khích. Phần giữ chỗ cho phép gửi truy vấn và giá trị vào cơ sở dữ liệu riêng lẻ khi được hỗ trợ bởi thư viện / cơ sở dữ liệu; và được mô phỏng bằng cách thoát khác. Việc sử dụng trình giữ chỗ đúng cách loại bỏ SQL Injection và nhu cầu mã người dùng để trộn các giá trị vào văn bản lệnh SQL, điều này cũng có thể làm cho các truy vấn dễ dàng hơn để viết và duy trì.

Để ngăn "lập trình viên cá nhân" viết các truy vấn khủng khiếp, giải pháp là ngăn chặn truy vấn đặc biệt khỏi bị phân tán trong mã:thu thập các thao tác truy cập dữ liệu vào một Lớp truy cập dữ liệu ( DAL) (có thể kết hợp với ORM) và chỉ hiển thị các hành động có liên quan, đảm bảo sử dụng SQL đúng cách trong DAL. Trong các dự án đơn giản hơn, DAL cũng là một địa điểm thích hợp để quản lý tập trung các quy tắc kinh doanh về vệ sinh và logic xác nhận khác.

Chính xác hơn:

  • Vệ sinh giá trị cho các quy tắc kinh doanh; điều này sẽ ngăn chặn "thông tin xấu", chẳng hạn như tên người dùng quá ngắn, chứa các ký tự bị hạn chế hoặc không đáp ứng các yêu cầu kinh doanh.

  • Sử dụng trình giữ chỗ để ngăn chặn SQL Injection . Đây là nghiêm ngặt liên quan đến việc chuyển dữ liệu sang SQL và không liên quan đến thông tin trong đó.

Trong khi MySQL 5.6.1 thêm FROM_BASE64 , để mã hóa có thể chỉ được sử dụng trong văn bản lệnh SQL, điều này vẫn thêm một bước giải mã rõ ràng bổ sung và làm phức tạp truy vấn khi sử dụng lược đồ mã hóa như vậy. Cách tiếp cận base64 này chỉ đơn giản là không cần thiết, vì đã có các kỹ thuật đã được chứng minh để ngăn chặn việc đưa vào SQL và không được đề xuất trong câu hỏi ban đầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng COUNT trong GROUP_CONCAT

  2. Cách hoạt động của hàm REGEXP_LIKE () trong MySQL

  3. Làm cách nào để tôi có thể định dạng TIMEDIFF của MySQL mà không mất vài giây?

  4. Ứng dụng để thiết kế ngược MySQL &PostgreSQL DB?

  5. Cập nhật cột dựa trên các trường hiện có