2011-02-04 8 views
1

リンクテーブルを作成するためにプログラムでOracleに接続する必要があるAccessデータベースがあります。接続文字列の形式は次のとおりです。MS Access - 接続文字列のSQLインジェクションを防止する

ODBC;Driver={Microsoft ODBC for Oracle};Pwd=<Password>;UID=<User>;Server=<Server> 

現在、ログイン情報はハードコードされています。

これでツールを別のデータベースに接続する必要があります。私は単にユーザーに<User><Password>、および<Server>を入力させ、すべてを1つの接続文字列に連結するだけでした。私はこれがSQLインジェクションの安全だと確信しています。なぜなら、この時点で接続が実際には存在しないからです。しかし、100%確実ではありません - これは正当なものですか?もしそうなら、自由形式のテキストフィールド)?

答えて

1

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!" 

ただし、これは可能なすべての入力に対して機能しません。たとえば、パスワードにセミコロンの前に二重引用符が含まれていると、テストスクリプトでエラーが発生します。私はガイドラインを誤って解釈している可能性があります。私は確信していませんが、うまくいけば、少なくともこれはあなたを始めます。

2

接続文字列で任意のSQLコードを実行できないため、これはSQLインジェクションと呼ばれません。

データベースにユーザーがデスクトップからアクセスできるようにする場合、おそらくSQLインジェクションはあまり関係のない問題です。なぜ誰かが自分の有効な資格情報を使用して接続を作成するほうがずっと簡単なときに、アプリケーションの脆弱性を介してSQLを注入しようとするのですか?

+1

さらに、起こりうる最悪のことは何ですか?それらには、ユーザーID、パスワード、およびサーバー名があります。これにより、アプリケーションの外部でデータベースに接続し、データを心のこもった内容に変換することができます。これは、あなたがデータベースのアカウントを与えたグラントと一緒に変更できるものだけです。彼らが慎重にすべてのテーブルを削除する文字列を作成し、彼らはそれを行うことができます場合は、最初にそれらの権利をそれらを与えたためです。彼らはどんなODBC SQLクライアントでも行うことができます。 – BIBD

関連する問題