Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Apakah kode ini mencegah injeksi SQL?

Sebagai jawaban atas pertanyaan langsung Anda:Apakah kode ini mencegah injeksi SQL:Tidak

Inilah buktinya - dorong string ini melalui metode PrepareString:

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

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

Saya memodifikasi metode GetRecord yang Anda posting untuk mengembalikan string SQL yang telah disiapkan sepenuhnya daripada mendapatkan catatan dari database:

Console.WriteLine(GetRecord(output))

Dan ini adalah outputnya

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

Tambahkan 1 baris kode tambahan:

My.Computer.Clipboard.SetText(input)

Dan Anda memiliki string yang perlu disalin langsung ke clipboard Anda untuk ditempelkan ke bidang input Anda di situs web untuk menyelesaikan injeksi SQL Anda:

'; Drop Table TableName; - -

[Memperhatikan bahwa karakter kontrol telah dihilangkan dari keluaran kiriman oleh StackOverflow, jadi Anda harus mengikuti contoh kode untuk membuat keluaran Anda]

Setelah metode PrepareString dijalankan, ia akan memiliki output yang sama persis - kode ASCII Chr(8) adalah spasi mundur yang akan menghapus "'" ekstra yang Anda tambahkan ke tambang yang akan menutup string Anda dan kemudian saya bebas untuk menambahkan apa pun yang saya inginkan di akhir. SiapkanString Anda tidak melihat -- karena saya sebenarnya menggunakan - - dengan karakter spasi mundur untuk menghilangkan spasi.

Hasil kode SQL yang Anda buat kemudian akan mengeksekusi pernyataan Drop Table saya tanpa hambatan dan segera mengabaikan sisa kueri Anda.

Hal yang menyenangkan tentang ini adalah Anda dapat menggunakan karakter yang tidak dapat dicetak untuk mengabaikan pemeriksaan karakter apa pun yang dapat Anda ciptakan. Jadi, paling aman menggunakan kueri berparameter (bukan itu yang Anda minta, tetapi merupakan jalur terbaik untuk menghindarinya).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lima Pertimbangan Teratas untuk Desain Indeks Basis Data di SQL Server

  2. Permintaan SQL untuk memilih tanggal di antara dua tanggal

  3. Kesalahan:Pernyataan INSERT EXEC tidak dapat disarangkan. dan Tidak dapat menggunakan pernyataan ROLLBACK dalam pernyataan INSERT-EXEC. Bagaimana cara mengatasi ini?

  4. Bagaimana saya bisa melakukan pemicu SEBELUM DIPERBARUI dengan sql server?

  5. sp_executesql lambat dengan parameter