これはセキュアなソフトウェア開発に関するラボ演習です。 ラボの詳細については、概要をご覧ください。
単純なデータ型の入力の検証を練習します。
この演習では、Expressフレームワーク(バージョン4)とexpress-validatorライブラリを使用して、JavaScriptで書かれたサーバー側のプログラムに簡単な入力検証を追加します。 ポイントは、これらの特定の技術について学ぶことではなく、一般的に安全なソフトウェアを書く方法を学ぶことです。
Expressでは、システムが特定のリクエストを受け取ったときに、関数のリスト"handlers(ハンドラ)"を実行するように指定できます。 express-validatorライブラリは、バリデーションチェックを簡単に追加できるようにするための関数のセットを提供しています。
以下のコードでは、/invoices パスの get リクエストに対してハンドラを設定しています。バリデーションエラーがない場合は、コードは請求書IDを表示します。 バリデーションエラーがある場合は、HTTPエラーコード422"Unprocessable Content(処理できないコンテンツ)"で応答します。 これは、何らかの理由でリクエストが無効であったことを示すステータスコードであり、エラーメッセージも表示されます。
残念ながら、このプログラムは適切な入力検証を行っていません。 このアプリケーションでは、idは1から9999までの整数でなければなりませんが、そのチェックを実行していません。 そのため、このプログラムにはクロスサイト スクリプティング(XSS)と呼ばれる、まだ説明していない脆弱性があります。 このXSS脆弱性により、攻撃者はidの中に悪意のあるスクリプトを挿入することができてしまうので、ビューアーがそれを自動的に実行する可能性があります! この脆弱性は、入力検証をすることで完全に防ぐことができます。
タスクを完了するには、以下を実行します。
注意: JavaScript の名前は大文字と小文字が区別されるため、isintでは機能しません。 このパラメータの末尾をコンマで示すことを忘れないでください (開始時に入力されているテキストではこれを行っています)。
必要に応じてヒントボタンを使用してください。
以下のコードは、クエリパラメータidを入力として受け入れます。idが1から9999までの整数 (1と9999も含む) である場合にのみ、受け入れられるように変更してください。