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