ASP を使用して Web ページを開発するときに留意すべき事項 ASP を使用している友人は、その手順を参照してください。
1. ユーザー入力が適切なサイズであることや、適切な文字が含まれていることを決して信頼しないでください。ユーザー入力は、意思決定に使用する前に常に検証する必要があります。最善の選択肢は、ASP ページから呼び出してユーザー入力を検証できる COM+ コンポーネントを作成することです。 Server.HTMLEncode メソッド、Server.URLEncode メソッド、またはこのページの下部にあるコード サンプルのいずれかを使用することもできます。
2. ユーザーが入力した文字列を連結して、ASP ページにデータベース接続文字列を作成しないでください。悪意のあるユーザーは、入力にコードを挿入することでデータベースにアクセスできるようになります。 SQL データベースを使用している場合は、ストアド プロシージャを使用してデータベース接続文字列を作成します。
3. デフォルトの SQL 管理者アカウント名 sa は使用しないでください。 SQL を使用する人なら誰でも、sa アカウントが存在することを知っています。安全でセキュアなパスワードを使用して別の SQL 管理アカウントを作成し、sa アカウントを削除します。
4. クライアント ユーザーのパスワードを保存する前に、ハッシュ アルゴリズム、base64 エンコード、または Server.HTMLEncode または Server.URLEncode を使用してこれらのパスワードをエンコードしてください。このページの下部にあるコード サンプルの 1 つを使用して、クライアント シークレットの文字を確認することもできます。
5. 管理スクリプトまたは ASP ページに管理アカウント名またはパスワードを配置しないでください。
6. ヘッダー データは悪意のあるユーザーによって偽造される可能性があるため、リクエスト ヘッダーに基づいてコード内で決定を下さないでください。リクエスト データを使用する前に必ずエンコードするか、以下のコード例を使用してリクエスト データに含まれる文字を確認してください。
7. セキュリティ データを Cookie に保存したり、Web ページの入力フィールドを非表示にしたりしないでください。
セッション Cookie を暗号化せずに送信するリスクを回避するために、セッション ベースのアプリケーションでは常に Secure Sockets Layer (SSL) を使用してください。セッション Cookie が暗号化されていない場合、悪意のあるユーザーが 1 つのアプリケーションでセッション Cookie を使用して、同じプロセス内の別のアプリケーションにアクセスする可能性があります。
8. ISAPI アプリケーション、フィルター、または COM+ オブジェクトを作成するときは、変数とデータのサイズによるバッファ オーバーフローに注意してください。また、絶対パス名を相対パス名または URL として解釈するなど、解釈によって生じる可能性のある正規化の問題にも注意してください。
9. シングルスレッド アパートメント (STA) で実行されている ASP アプリケーションがマルチスレッド アパートメント (MTA) に切り替えられると、偽装トークンは廃止されます。これにより、アプリケーションが偽装せずに実行され、他のリソースへのアクセスを許可するプロセスの ID を使用して効果的に実行できるようになります。スレッド モデルを切り替える必要がある場合は、変更を行う前にアプリケーションを無効にしてアンインストールしてください。
コード例
このコード例には、関数に送信された文字列から潜在的に有害な文字を削除する関数が含まれています。上記の両方の例では、正しいエンコードを保証するためにコード ページを指定します。次の例では、Microsoft Visual Basic® Scripting Edition (VBScript) を使用しています。
<%@ LANGUAGE=VBScript %> <% 応答.コードページ = 1252 Response.Write(Hello, & RemoveBadCharacters(Request.Form(UserName))) Response.Write(<BR>これがエラーを受け取った理由です:) 関数 RemoveBadCharacters(strTemp) ディム正規表現 正規表現 = 新しい正規表現を設定します regEx.Pattern = [^/s/w] regEx.Global = True RemoveBadCharacters = regEx.Replace(strTemp, ) 終了機能 %> |
次の例では Microsoft JScript® を使用しています。
<%@ LANGUAGE=JScript %> <% 応答.コードページ = 1252; Response.Write(Hello, + RemoveBadCharacters(Request.Form(UserName))); Response.Write(<BR>これがエラーを受け取った理由です:); function RemoveBadCharacters(strTemp) { strTemp = strTemp.replace(/[^/s/w]/g,); strTemp を返します。 } %> |