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

psycopg2 và bảo mật SQL injection

AsIs là không an toàn, trừ khi bạn thực sự biết mình đang làm gì. Bạn có thể sử dụng nó để kiểm tra đơn vị chẳng hạn.

Truyền tham số không phải là không an toàn, miễn là bạn không định dạng trước truy vấn sql của mình. Không bao giờ làm:

sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)

Kể từ khi user_input có thể là ';DROP DATABASE;' chẳng hạn.

Thay vào đó, hãy làm:

sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))

pyscopg2 sẽ làm sạch truy vấn của bạn. Ngoài ra, bạn có thể làm sạch trước các thông số trong mã của mình bằng logic của riêng bạn, nếu bạn thực sự không tin tưởng đầu vào của người dùng.

Per psycopg2 tài liệu của :

Ngoài ra, tôi sẽ không bao giờ để người dùng cho tôi biết tôi nên truy vấn bảng nào. Logic (hoặc các tuyến) của ứng dụng sẽ cho bạn biết điều đó.

Về AsIs() , per psycopg2 tài liệu của :

Vì vậy, không sử dụng nó với đầu vào của người dùng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Về tác động của việc viết toàn trang

  2. Lỗi khi sử dụng R để lấy thông tin đăng nhập từ Windows Cred Vault

  3. Truy vấn postgres để kiểm tra một chuỗi có phải là một số không

  4. tìm kiếm MAX (db_timestamp) truy vấn

  5. Tạo `nhóm theo` dẫn đến nhiều cột