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

SQL Injjection với thay thế dấu ngoặc kép và xác thực số nguyên

Nếu đây là một dự án kế thừa được mã hóa theo cách này thì mặc dù không phải là tối ưu, tôi hiện không biết bất kỳ cách nào mà nó có thể dễ bị tiêm SQL miễn là mọi chuỗi được xử lý theo cách đó và các truy vấn chỉ đơn giản những cái như bạn đã hiển thị.

Tuy nhiên, tôi không thể nói chắc chắn hơn điều đó. Nếu không sử dụng các truy vấn tham số, luôn có khả năng có một lỗ hổng bảo mật nào đó mà bạn chưa xem xét.

Tự thoát khỏi các trích dẫn theo cách thủ công rất dễ xảy ra lỗi và đôi khi có thể thất bại theo những cách khó lường trước. Ví dụ với bảng sau

CREATE TABLE myTable(title VARCHAR(100))
INSERT INTO myTable VALUES('Foo')

Và thủ tục được lưu trữ bằng cách sử dụng SQL động được xây dựng với nối chuỗi

CREATE PROC UpdateMyTable
@newtitle NVARCHAR(100)
AS
/*
Double up any single quotes
*/
SET @newtitle = REPLACE(@newtitle, '''','''''')

DECLARE @UpdateStatement VARCHAR(MAX)

SET @UpdateStatement = 'UPDATE myTable SET title='''  + @newtitle + ''''

EXEC(@UpdateStatement)

Bạn có thể thử cách sau

Cập nhật bình thường

EXEC UpdateMyTable N'Foo'
SELECT * FROM myTable /*Returns "Foo"*/

Nỗ lực đưa vào SQL bị phá vỡ

EXEC UpdateMyTable N''';DROP TABLE myTable--'
SELECT * FROM myTable  /*Returns "';DROP TABLE myTable--"*/

Nỗ lực SQL Injection thành công và bỏ bảng

EXEC UpdateMyTable N'ʼ;DROP TABLE myTable--'
SELECT * FROM myTable  /*Returns "Invalid object name 'myTable'."*/

Vấn đề ở đây là truy vấn thứ ba chuyển U + 02BC thay vì dấu nháy đơn chuẩn và sau đó chuỗi được gán cho varchar(max) sau khi quá trình vệ sinh xảy ra, điều này sẽ âm thầm chuyển điều này thành một dấu nháy đơn thường xuyên.

Cho đến khi tôi đọc câu trả lời ở đây vấn đề đó sẽ không bao giờ xảy ra với tôi.




  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 tìm định dạng ngày được sử dụng cho một ngôn ngữ cụ thể trong SQL Server (T-SQL)

  2. cột mới để tính thời gian làm thêm giờ

  3. Làm cách nào để chèn đầu ra từ xml.nodes () vào bảng?

  4. Tính toán tổng số chạy / số dư chạy

  5. Cần chuyển đổi kiểu trả về DataTable thành chuỗi