データを「スクラブ」する必要があるという古くからの問題が発生しました。 これは、オペレータや外出先がウェブから物事を引き出している場合によく発生します。問題は、他人があなたのシステムに入れているものを制御できないということです。
上記のとおり、「一重引用符」は問題を引き起こす可能性があります。または、コンマが問題を引き起こす可能性があります。また、他の見えないアスキー文字も問題を引き起こす可能性があります。 (特に、プリンタにテキストを送る場合)ラインフィードキャリッジリターンのようなものは、あらゆる種類の問題を引き起こす可能性があり、そこにいることさえ分かりません。
「どのような注意を払うべきなのか」という質問に答えるには、「どのような文字を許可しますか」という言葉に言い換えてください。ここで
あなたはあなたが読んで、各文字列をスキャンするためにVBAを使用することができますall ascii charactersのマップへのリンクです。
あなたの文字列データをスクラブする必要がある場合、これは時間がかかりますが、必要なものです。
基本的な考え方は、読み込み中(または読み込み中)の文字列と、ASCIIコードが許容範囲内にあるかどうかを確認するための文字ベースの文字チェックを解析することです。
すなわち:範囲65
Dim strChar As String
Dim intAsc As Integer
Dim booFlag As Boolean
intAsc = Asc(strChar)
If ((intAsc >= 65) And (intAsc <= 90)) _
Or ((intAsc >= 97) And (intAsc <= 122)) _
Or ((intAsc >= 48) And (intAsc <= 57)) _
Or ((intAsc = 32) _
Then
booFlag = True
End If
から90をお使いの大文字です。 97 - 122は小文字です。 48〜57は0〜9です。そして、32は真のスペース文字のためのasciiです。 他の "Or"ステートメントを追加して、データベースに必要なコードのみを追加することもできます。しかし、あなたは "シングルクォート"と他の見えないもののアスキーを残したいと思うでしょう。
このコードをVBA関数に配置して、チェックする各文字列を解析することができます。承認されたリストにないものが見つかった場合は、それをスペース文字(または他のもの)に変更することができます。
また、SQLインジェクションが心配な方は、キーワードをスキャンする代わりに、パラメータ化されたクエリを使用してSQLコマンドを送信することを検討する必要があります。
希望は、あなたには動作するフレームワークを提供します。 :)
代わりに準備されたステートメントを使用して、これについて心配する必要はありません。 – Siyual
あなたはどんなキャラクターが心配すべきかを心配する以外に、この全体のセットアップは、SQLインジェクション攻撃のための巨大なオープニングのように聞こえます。 @Siyualが言及するように、準備されたステートメントを使用し、この問題を回避するためにパラメータをバインドする必要があります(キャラクタの問題も修正されます)。 ADODBを使用している場合は、[このまともな例](https://www.mcpressonline.com/programming-other/microsoft/techtip-use-prepared-statements-with-ado-to-access-iseries-data)を参照してください。クエリの作成時にパラメータを使用する方法を参照してください。 – JNevill
[PHPでSQLインジェクションを防止するにはどうすればいいですか?](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –