ASP / VBScriptでインジェクションを防ぐ方法は?
-
07-07-2019 - |
質問
ASP(VBScript)の入力処理の最良の方法(または少なくとも最も一般的な方法)は何ですか?私の主な懸念は、HTML / JavaScriptインジェクション<!> amp;です。 SQLインジェクション。 PHPのhtmlspecialchars
またはaddslashes
などに相当するものはありますか?または、文字列置換関数のようなもので手動で行う必要がありますか?
解決
要点は次のとおりです:
- ページに書き込む前に、常にユーザー入力をHTMLエンコードします。
Server.HTMLEncode()
はあなたのためにそれを行います。 - 常にパラメータ化されたクエリを使用して、データベースとインターフェイスします。ここでは、
ÀDODB.Command
およびADODB.CommandParameter
オブジェクトが正しい選択です。 - バージョン6以降で、これらのツールが不要な場合を除き、ページをレンダリングするIISサーバーでURLScanユーティリティとIISロックダウンを常に使用します。
ポイント1と2に固執する場合は、軽lav的に、うまくいかないことはほとんど考えられません。
ほとんどの脆弱性は、ユーザー入力を適切にエンコードしないこと、またはそこからSQL文字列を構築することに起因します。何らかの理由で、HTMLエンコードのユーザー入力が邪魔になるところまで来たら、アプリケーションの設計上の欠陥を発見しました。
他のヒント
トマラックリストにもう1点追加します。
SQLコードでフィールド値の連結を使用しないでください。つまり、場合によっては、ストアドプロシージャが文字列にSQLを作成し、後で実行することがあります。テキストフィールド値がその構築の一部として使用されない限り、これは問題ありません。
コマンドパラメータは、値を入力するように設計されたSQLコードを保護して、不要なSQLの実行にハイジャックされることを防ぎますが、そのような不要なSQLをデータベース内のデータにすることができます。これは第1レベルの脆弱性です。フィールドの値がストアドプロシージャ内のSQL文字列連結で使用される場合、第2レベルのインジェクションの脆弱性が存在します。
もう1つの考慮事項は、これが単なる最小限の保護であることです。そのすべては、攻撃の試みを無害にすることです。ただし、多くの場合、このようなデータ入力を完全に防ぐシステムを追加するか、管理者を潜在的なインジェクション攻撃に変更するシステムを追加する方がよい場合があります。
ここで入力検証が重要になります。あなたのためにこれを行うツールは知りませんが、いくつかの簡単な正規表現が役立つかもしれません。たとえば、<!> quot; <!> lt; \ w + <!> quot;フィールドにHTMLタグを含める試みを検出します。