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

Mã này có ngăn chặn việc đưa vào SQL không?

Trả lời cho câu hỏi trực tiếp của bạn:Mã này có ngăn chặn việc đưa vào SQL không:Không

Đây là bằng chứng - đẩy chuỗi này thông qua phương thức Chuẩn bị sẵn:

Dim input = "'" & Chr(8) & "; Drop Table TableName; - " & Chr(8) & "-"
Dim output = PrepareString(input)

Console.WriteLine(input)
Console.WriteLine(output)

Tôi đã sửa đổi phương thức GetRecord mà bạn đã đăng để trả về chuỗi SQL đã chuẩn bị đầy đủ thay vì lấy bản ghi từ cơ sở dữ liệu:

Console.WriteLine(GetRecord(output))

Và đây là đầu ra

Input  = ; Drop Table TableName; --
Output = '; Drop Table TableName; --
Query  = SELECT * FROM TableName WHERE Key = ''; Drop Table TableName; --'

Thêm 1 dòng mã bổ sung:

My.Computer.Clipboard.SetText(input)

Và bạn đã có chuỗi mà bạn cần sao chép ngay vào khay nhớ tạm để dán vào trường nhập liệu trên trang web để hoàn thành việc chèn SQL của bạn:

'; Drop Table TableName; - -

[Lưu ý rằng các ký tự điều khiển đã bị StackOverflow bỏ qua khỏi đầu ra của bài đăng, vì vậy bạn sẽ phải làm theo ví dụ mã để tạo đầu ra của mình]

Sau khi phương thức Chuẩn bị sẵn sàng được chạy, nó sẽ có cùng một kết quả đầu ra - mã Chr (8) ASCII là dấu cách xóa lùi sẽ loại bỏ dấu "'" thừa mà bạn đang thêm vào sẽ đóng chuỗi của bạn và sau đó tôi miễn phí để thêm bất cứ điều gì tôi muốn vào cuối. Chuẩn bị của bạn không nhìn thấy chuỗi của tôi - bởi vì tôi thực sự đang sử dụng - - với một ký tự xóa lùi để xóa khoảng trắng.

Sau đó, mã SQL kết quả mà bạn đang xây dựng sẽ thực thi câu lệnh Drop Table của tôi mà không bị cản trở và nhanh chóng bỏ qua phần còn lại của truy vấn của bạn.

Điều thú vị về điều này là bạn có thể sử dụng các ký tự không in được để về cơ bản bỏ qua bất kỳ kiểm tra ký tự nào mà bạn có thể phát minh ra. Vì vậy, an toàn nhất là sử dụng các truy vấn được tham số hóa (không phải là những gì bạn đã hỏi, nhưng là cách tốt nhất để tránh điều này).



  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ơ sở dữ liệu hệ thống máy chủ SQL - Bảo trì Tempdb

  2. Nhóm hội thoại của nhà môi giới dịch vụ máy chủ Sql

  3. Thay đổi một cột:null thành không null

  4. Yêu cầu không thành công hoặc dịch vụ không phản hồi kịp thời?

  5. Hướng dẫn cơ sở dữ liệu SQL Server (MSSQL DBA) cho người mới bắt đầu quản trị cơ sở dữ liệu