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

Xây dựng một truy vấn động trong C # (SQL Injection Attack)

Xây dựng truy vấn theo cách này khiến nó dễ bị tấn công SQL injection trừ khi bạn đã thoát khỏi đầu vào của mình theo cách thủ công (I.E. khiến giá trị của 'projectID' không thể thay đổi cấu trúc của truy vấn bằng cách sử dụng trình tự thoát cụ thể của công cụ cơ sở dữ liệu). Tuy nhiên, cách được khuyến nghị để làm điều này là sử dụng các truy vấn được tham số hóa (đôi khi được gọi là "Câu lệnh chuẩn bị"). Với các truy vấn được tham số hóa, bạn chỉ cần xác định cấu trúc của truy vấn và sau đó cung cấp các giá trị đầu vào riêng biệt dưới dạng tham số, ngăn cấu trúc truy vấn của bạn không bao giờ bị thay đổi thông qua SQL injection.

Đây là ví dụ của bạn, đã được thay đổi để sử dụng tham số hóa:

public DataSet GetProject(string projectID)
{
   DataSet dataTable = new DataSet(); 
   DataAccess dataAccess = new DataAccess();
   OracleCommand commandOb = new OracleCommand();
   strQuery = @"select projectName, managerName
                  from project
                  where projectID = :ProjectID"

   cmd.CommandText = strQuery;
   cmd.Parameters.AddWithValue("ProjectID", projectID);
   dataTable = dataAccess.ExecuteDataAdapter(commandOb);

   return dataTable;
}

Tham số ':ProjectID' trong truy vấn sẽ được thay thế bằng giá trị được cung cấp trong phương thức 'AddWithValue'. Bất kể giá trị nào trong biến 'projectID', nó sẽ luôn được đánh giá là một phần của mệnh đề WHERE. Trong khi, trước đây, một giá trị tương tự như ['; XÓA khỏi dự án; -] có thể có ảnh hưởng không mong muốn bằng cách thay đổi truy vấn của bạn thành đọc như sau:

select projectName, managerName
  from project
  where projectID = ''; DELETE FROM project;--'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách giải quyết Không thể giải quyết một số mô-đun oracledb?

  2. Gửi các giá trị được phân tách bằng dấu phẩy tới mệnh đề WHERE trong thủ tục lưu trữ oracle

  3. Oracle - Tại sao số 0 đứng đầu của một số biến mất khi chuyển đổi nó thành TO_CHAR

  4. Oracle đến Derby - Kết nối và Bắt đầu với Tương đương trong Derby

  5. Hàm giống UTL_MATCH để hoạt động với CLOB