diff --git a/docs/labs/checker.js b/docs/labs/checker.js index 4a561be6..5146b8b2 100644 --- a/docs/labs/checker.js +++ b/docs/labs/checker.js @@ -61,17 +61,17 @@ const resources = { already_correct: '答えはすでに正しいです!', complete: '完了', completed: '完了しました', - congrats: '「おめでとうございます!」あなたの答えは正解です!', - congrats_all: '素晴らしい仕事でした!あなたの答えはすべて正解です!', + congrats: 'おめでとうございます!正解です!', + congrats_all: '素晴らしい!すべて正解です!', expecting: "次のような答えを期待していました:\n{0}", give_up_title: '諦めて答えを示してください。', hint_title: '現在の試行に関するヒントを提供します。', no_hints: '申し訳ありませんが、このラボにはヒントがありません。', no_matching_hint: '申し訳ありませんが、あなたの試みに一致するヒントが見つかりません。', - reset_title: '初期状態をリセットします (現在の試行を破棄します)。', - to_be_completed: '完成する', + reset_title: '初期状態にリセットします (現在の試行を破棄します)。', + to_be_completed: '完了する', try_harder_give_up: 'もっと頑張れ!そんなにすぐに諦めないでください。開始または最後のヒントから経過した現在の時間 (秒単位): {0}', - try_harder_hint: "もっと頑張れ!すぐにヒントを求めず、少なくとも {0} 秒待ちます。", + try_harder: 'もっと頑張ってください! すぐに諦めないでください。現在の所要時間 (秒): {0}', }, }, fr: { diff --git a/docs/labs/input1.js b/docs/labs/input1.js index 7fb0d918..f0f3f96a 100644 --- a/docs/labs/input1.js +++ b/docs/labs/input1.js @@ -7,6 +7,7 @@ info = { absent: ", $", text: "This is a parameter, it must end with a comma.", + text_ja: "パラメータはカンマで終わる必要があります。", examples: [ [ " " ] ], @@ -14,6 +15,7 @@ info = { absent: String.raw`query \( ["'${BACKQUOTE}]id["'${BACKQUOTE}] \)`, text: "Add query(\"id\") to verify its value.", + text_ja: "query(\"id\")を追加して、値を検証してください。", examples: [ [ "," ], [ " query()," ] @@ -22,6 +24,7 @@ info = { present: String.raw`query \( ["'${BACKQUOTE}]id["'${BACKQUOTE}] \) [^. ]`, text: "After query(\"id\") use a period to invoke a verification method.", + text_ja: "query(\"id\")の後にピリオドを追加して、バリデーションメソッドを呼び出してください。", examples: [ [ " query('id')," ] ], @@ -29,6 +32,7 @@ info = { present: "(isint|Isint|IsInt|ISINT)", text: "JavaScript is case-sensitive. Use isInt instead of the case you have.", + text_ja: "JavaScriptは大文字と小文字を区別します。使用している文字の代わりにisIntを使用してください。", examples: [ [ " query('id').isint()," ], [ " query('id').IsInt()," ] @@ -37,6 +41,7 @@ info = { absent: "isInt", text: "Use isInt to determine if the parameter is an integer.", + text_ja: "パラメータが整数かどうかを判断するためにisIntを使用してください。", examples: [ [ " query('id').," ] ], @@ -44,6 +49,7 @@ info = { present: String.raw` query \( ["'${BACKQUOTE}]id["'${BACKQUOTE}] \).*\([^)]*$`, text: "After query(\"id\") you have an ( but there's no matching ).", + text_ja: "query(\"id\") の後に必要なものがありません。", examples: [ [ " query('id').isInt(," ] ], @@ -51,6 +57,7 @@ info = { absent: String.raw`isInt \(.*\)`, text: "isInt should be followed by (...).", + text_ja: "isIntの後に書くべきものがあります。", examples: [ [ " query('id').isInt," ] ], @@ -58,6 +65,7 @@ info = { present: String.raw`\{[^}]*$`, text: "You have started an object using { but there's no matching }.", + text_ja: "{を使用してオブジェクトを開始していますが、対応する}がありません。", examples: [ [ " query('id').isInt({)," ] ], @@ -65,6 +73,7 @@ info = { absent: String.raw`isInt \( \{.*\} \)`, text: "Inside the parenthesis of isInt() you should have an object like {...}.", + text_ja: "isInt()の括弧内には、{...}のようなオブジェクトを記述する必要があります。", examples: [ [ " query('id').isInt()," ] ], @@ -72,6 +81,7 @@ info = { absent: "min", text: "Use min: to specify a minimum value.", + text_ja: "最小値を指定するには min: を使用してください。", examples: [ [ " query('id').isInt({})," ] ], @@ -79,6 +89,7 @@ info = { absent: "max", text: "Use max: to specify a minimum value.", + text_ja: "最大値を指定するには max: を使用してください。", examples: [ [ " query('id').isInt({min: 1})," ] ], @@ -86,6 +97,7 @@ info = { present: "max.*min", text: "JavaScript allows hash entries to be in any order, but this can be confusing to humans. Conventionally minimum values are given before maximum values; please follow that convention.", + text_ja: "JavaScriptではハッシュエントリの順序は任意ですが、人間にとっては混乱する可能性があります。慣例的に最小値は最大値の前に記述されますので、この慣例に従ってください。", examples: [ [ " query('id').isInt({max: 9999, min: 1})," ] ], diff --git a/docs/labs/ja_input1.html b/docs/labs/ja_input1.html new file mode 100644 index 00000000..6e691613 --- /dev/null +++ b/docs/labs/ja_input1.html @@ -0,0 +1,121 @@ + + +
+ + + + + + + + + + + + + ++これはセキュアなソフトウェア開発に関するラボ演習です。 +ラボの詳細については、概要をご覧ください。 + +
+
+単純なデータ型の入力の検証を練習します。 + +
+
+この演習では、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も含む) である場合にのみ、受け入れられるように変更してください。 + +
+ +
+ +