Ewebeditor および fckeditork エディターは一重引用符をフィルターします
SQL=insert into product(title,content)values(' &request(title)& ' ,' &request(content)& ' )という書き方をしたので、その時にお客様がエディタにCOPYした内容が分かりました。すると、確かに、このコンテンツには一重引用符が含まれていることがわかりました。顧客がエディターに送信したコンテンツに一重引用符が含まれていたため、SQL ステートメントが変更されました。これは、元の SQL=insert into に相当します。 product(タイトル、コンテンツ) の値 ('コンテンツ' ,'content') は SQL=insert into product(title,content) names('content','content'') になることがわかります。これは、コンテンツ内に余分な一重引用符があるためです。 SQL ステートメントには重大な書き込みエラーが発生しますが、このことを考えると、SQL ステートメントがエラー メッセージを表示せずに、操作が成功したことを示すメッセージが表示されるのはなぜでしょうか。 2003 年当時の一般的な小さなハッカーを思い出してください。「or」=「or」を使用するのが好きでした。バックエンド侵入メソッドは、SQL の実行時に単一引用符がフィルタリングされないというバグを利用しているようで、その結果、SQL がどのように実行されても結果が true を返します。プログラムはできるだけ単純かつ明確に書く必要がありますが、これも間違いです。問題は見つかりました。今後は、すべての SQL がデータベースに入力される前に、フィールドをフィルターしてから値を渡し、この問題が再び発生しないようにします。以下は非常に完全な SQL セキュリティ フィルターです。関数を呼び出すだけで済みます。
関数 HTMLEncode(Str)
If Isnull(Str) then
HTMLエンコード=
終了関数
終了の場合
Str = Replace(Str,Chr(0),, 1, -1, 1)
Str = 置換(Str, , ", 1, -1, 1)
Str = 置換(Str,<,<, 1, -1, 1)
Str = 置換(Str,>,>, 1, -1, 1)
Str = Replace(Str, script, script, 1, -1, 0)
Str = Replace(Str, SCRIPT, SCRIPT, 1, -1, 0)
Str = Replace(Str, Script, Sscript, 1, -1, 0)
Str = Replace(Str, script, Script, 1, -1, 1)
Str = Replace(Str, オブジェクト, オブジェクト, 1, -1, 0)
Str = Replace(Str, OBJECT, OBJECT, 1, -1, 0)
Str = Replace(Str, オブジェクト, Oオブジェクト, 1, -1, 0)
Str = Replace(Str, オブジェクト, Oオブジェクト, 1, -1, 1)
Str = Replace(Str, アプレット, aプレット, 1, -1, 0)
Str = Replace(Str, APPLET, APPLET, 1, -1, 0)
Str = Replace(Str, アプレット, Aプレット, 1, -1, 0)
Str = Replace(Str, アプレット, Aアプレット, 1, -1, 1)
Str = 置換(Str, [, [)
Str = 置換(Str, ], ])
Str = 置換(Str, , , 1, -1, 1)
Str = 置換(Str, =, =, 1, -1, 1)
Str = 置換(Str, ', '', 1, -1, 1)
Str = Replace(Str, select, sel'ct, 1, -1, 1)
Str = Replace(Str, 実行, execute, 1, -1, 1)
Str = Replace(Str, exec, exec, 1, -1, 1)
Str = Replace(Str, join, join, 1, -1, 1)
Str = Replace(Str, Union, union, 1, -1, 1)
Str = Replace(Str, where, wh're, 1, -1, 1)
Str = Replace(Str, insert, insert, 1, -1, 1)
Str = Replace(Str, delete, del'te, 1, -1, 1)
Str = Replace(Str, update, update, 1, -1, 1)
Str = Replace(Str, like, like, 1, -1, 1)
Str = Replace(Str, ドロップ, drop, 1, -1, 1)
Str = Replace(Str, create, create, 1, -1, 1)
Str = Replace(Str, 名前変更, 名前変更, 1, -1, 1)
Str = Replace(Str, count, cont, 1, -1, 1)
Str = Replace(Str, chr, chr, 1, -1, 1)
Str = 置換(Str、mid、mid、1、-1、1)
Str = Replace(Str, truncate, trunc'te, 1, -1, 1)
Str = Replace(Str, nchar, nch'r, 1, -1, 1)
Str = Replace(Str, char, ch'r, 1, -1, 1)
Str = Replace(Str, alter, alter, 1, -1, 1)
Str = Replace(Str, キャスト, ca't, 1, -1, 1)
Str = Replace(Str, 存在する, exists, 1, -1, 1)
Str = Replace(Str,Chr(13), , 1, -1, 1)
HTMLEncode = Replace(Str,','', 1, -1, 1)
終了機能