ADO.NETにはConnection String Builderクラスのクラスがあります(ただし、SQLがないため「接続文字列インジェクション」と「SQLインジェクション」と呼ばれる方が正確ですが)関与する)。 .NETを使用していないので、次の最良の選択肢は、入力サニタイズと特殊文字のエスケープです。 セミコロン、単一引用符、または 二重引用符を含む値を含めるには
、値が 二重引用符で囲む必要があります。OLEDB接続文字列の構文状態にMSDN referenceこと。
と
値は 単一引用符と二重引用符 文字の両方が含まれている場合は、引用符文字は、値を囲むために を使用し、それが値内で発生 たびに倍にする必要があります。
これは、私が上記の2つのガイドラインを実装しようとしている一緒に入れVBScriptのです:
Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;User ID=test_user;Password="app""le'\"
:私のパスワードがapp"le'\
た場合は、接続文字列のように終わるでしょう
Option Explicit
Dim pw, connStr, conn
pw = InputBox("Enter password")
' Sanitize double quotes in the input string
pw = Replace(pw, Chr(34), Chr(34) & Chr(34))
' Notice how pw is surrounded by double quote characters
connStr = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;User ID=test_user;Password=" & Chr(34) & pw & Chr(34)
' Test the connection. We'll get a runtime error if it didn't work
Set conn = CreateObject("ADODB.Connection")
conn.Open connStr
conn.Close
WScript.Echo "OK!"
ただし、これは可能なすべての入力に対して機能しません。たとえば、パスワードにセミコロンの前に二重引用符が含まれていると、テストスクリプトでエラーが発生します。私はガイドラインを誤って解釈している可能性があります。私は確信していませんが、うまくいけば、少なくともこれはあなたを始めます。
さらに、起こりうる最悪のことは何ですか?それらには、ユーザーID、パスワード、およびサーバー名があります。これにより、アプリケーションの外部でデータベースに接続し、データを心のこもった内容に変換することができます。これは、あなたがデータベースのアカウントを与えたグラントと一緒に変更できるものだけです。彼らが慎重にすべてのテーブルを削除する文字列を作成し、彼らはそれを行うことができます場合は、最初にそれらの権利をそれらを与えたためです。彼らはどんなODBC SQLクライアントでも行うことができます。 – BIBD