-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into feature/メッセージ管理機能を調査する
- Loading branch information
Showing
20 changed files
with
740 additions
and
449 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- | ||
title: アプリケーション セキュリティ編 | ||
description: アプリケーションセキュリティを 担保するための方針を説明します。 | ||
--- | ||
|
||
# アプリケーションセキュリティ編 {#top} | ||
|
||
本章では、 AlesInfiny Maia OSS Edition (以降『AlesInfiny Maia』)のアプリケーションにおいてセキュリティを担保するための対策について説明します。 | ||
|
||
なお、セキュアな Web アプリケーションの作り方については、 [安全なウェブサイトの作り方 | 情報セキュリティ | IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/vuln/websecurity/about.html) も併せて参照してください。 | ||
|
||
!!! danger "注意事項" | ||
|
||
本章は、Web アプリケーションにおいて特に注意すべきセキュリティ対策について説明するものです。すべてのアプリケーションセキュリティ対策を網羅しているわけではありませんし、たとえばネットワークレベルの防御といったインフラレベルでの対策は別途考慮する必要があります。 | ||
|
||
**本章に述べる対策のみでシステムのセキュリティ対策が完結するとは考えないでください。** | ||
|
||
1. [XSS (クロスサイトスクリプティング)](./xss.md) | ||
|
||
XSS 攻撃への AlesInfiny Maia での対策を説明します。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
--- | ||
title: アプリケーション セキュリティ編 | ||
description: アプリケーションセキュリティを 担保するための方針を説明します。 | ||
--- | ||
|
||
# XSS (クロスサイトスクリプティング) {#top} | ||
|
||
## XSS とは {#what-is-xss} | ||
|
||
[安全なウェブサイトの作り方 - 1.5 クロスサイト・スクリプティング | 情報セキュリティ | IPA 独立行政法人 情報処理推進機構](https://www.ipa.go.jp/security/vuln/websecurity/cross-site-scripting.html) より XSS の定義を以下に引用します。 | ||
|
||
<!-- textlint-disable --> | ||
|
||
> ウェブアプリケーションの中には、検索のキーワードの表示画面や個人情報登録時の確認画面、掲示板、ウェブのログ統計画面等、利用者からの入力内容やHTTPヘッダの情報を処理し、ウェブページとして出力するものがあります。ここで、ウェブページへの出力処理に問題がある場合、そのウェブページにスクリプト等を埋め込まれてしまいます。この問題を「クロスサイト・スクリプティングの脆弱性」と呼び、この問題を悪用した攻撃手法を、「クロスサイト・スクリプティング攻撃」と呼びます。 | ||
<!-- textlint-enable --> | ||
|
||
## AlesInfiny Maia での XSS 対策 {#measures-against-xss} | ||
|
||
原則として以下の方針をとります。 | ||
|
||
- アプリケーション外から取得した値(クライアントからの入力値、データベースから取得した値など)を画面に出力する際は文字列をプレーンテキスト化することで HTML や JavaScript として解釈させない | ||
|
||
### CSR アプリケーション {#csr-application} | ||
|
||
フロントエンドを Vue.js で構築する場合、 XSS 対策として以下の方針をとります。 | ||
|
||
- アプリケーション外から取得した値を画面に文字列として出力するときは、常に `{{ }}` で囲む(マスタッシュ構文) | ||
|
||
Vue.js では、 `{{ }}` で囲んだ文字列内の特殊文字は HTML エンコードされて出力されるため、アプリケーション外から取得した値を画面に出力する箇所では必ず `{{ }}` で囲むようにします。 | ||
|
||
- アプリケーション外から取得した値を `<a>` タグの `href` 属性に設定する場合は値を無害化する | ||
|
||
Vue.js では動的な属性のバインディング時にも自動でエスケープ処理されるため、アプリケーション外から取得した値を HTML の属性に設定することを禁止しません。ただし、以下のようなコードの場合、 `javascript:` の使用による JavaScript の実行を防ぐことができません。 | ||
|
||
```vue | ||
<a v-bind:href="アプリケーション外から取得した値"> | ||
リンクをクリック | ||
</a> | ||
``` | ||
そのため、アプリケーション外から取得した値を `<a>` タグの `href` 属性に設定する場合は以下のように対策します。 | ||
- http:// または https:// から始まっていない入力値は受け付けない | ||
- [sanitize-url](https://www.npmjs.com/package/@braintree/sanitize-url) 等のライブラリを使用して値を無害化する | ||
!!! warning "" | ||
入力値の形式が正しい URL であっても、リンク先のコンテンツが安全とは限らないことに注意してください。 | ||
- アプリケーション外から取得した値をテンプレートとして出力することを禁止する | ||
`v-html` や描画関数を使用してアプリケーション外から取得した値をそのまま出力してはなりません。 | ||
```js title="XSS に対して脆弱なコード例①" | ||
new Vue({ | ||
el: '#app', | ||
template: `<div>` + アプリケーション外から取得した値 + `</div>` | ||
}) | ||
``` | ||
```vue title="XSS に対して脆弱なコード例②" | ||
<div v-html="アプリケーション外から取得した値"></div> | ||
``` | ||
!!! warning "アプリケーションを設計する上での注意事項" | ||
CMS ライクな機能を提供する場合など、エンドユーザーに HTML を直接入力させたい場面があるかもしれません。その場合も、たとえば画面上には HTML のタグや属性を選択肢として表示し、選択された値に応じて画面を構成するなどして、入力値を直接画面に出力することは極力避けてください。 | ||
### SSR アプリケーション {#ssr-application} | ||
(今後追加予定) |
53 changes: 53 additions & 0 deletions
53
documents/contents/guidebooks/conventions/coding-conventions.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
--- | ||
title: コーディング規約 | ||
description: AlesInfiny Maia OSS Edition のコーディング規約に関する方針を示します。 | ||
--- | ||
|
||
# コーディング規約 {#top} | ||
|
||
AlesInfiny Maia OSS Edition (以下 AlesInfiny Maia )では、一般に広く採用されている規約に準拠し、必要に応じて最低限のカスタムルールを加えることを基本方針とします。 | ||
ゼロから独自規約を作成することは、以下のような問題があるため推奨しません。 | ||
|
||
- 規約作成にかかる負荷が大きい | ||
- 必要な規約の漏れが発生しやすい | ||
- 機械的なチェックの仕組みを作りにくい | ||
|
||
## AlesInfiny Maia で採用している規約 {#style-guide} | ||
|
||
Java アプリケーション、 Vue.js アプリケーションそれぞれで以下の内容を基本のコーディング規約としています。 | ||
|
||
- Java アプリケーション | ||
- [Google Java Style :material-open-in-new:](https://google.github.io/styleguide/javaguide.html){ target=_blank } | ||
|
||
Google が提供する、コードのフォーマットに対する規約です。 | ||
改行やインデントの規則、メソッド名や変数名の命名規則などを定めています。 | ||
|
||
- [SpotBugs :material-open-in-new:](https://spotbugs.github.io/){ target=_blank } のバグパターン | ||
|
||
SpotBugs は静的解析ツールであるとともに、バグパターンと呼ばれるバッドプラクティスや脆弱性に関する定義を持ち、それらのコード中での出現を検知します。 | ||
SpotBugs によって検出された、バグパターンに該当するコードを修正することで、より安全なコーディングを実現できます。 | ||
|
||
- Vue.js アプリケーション | ||
- [Airbnb JavaScript Style Guide :material-open-in-new:](https://github.com/airbnb/javascript){ target=_blank } | ||
|
||
Airbnb が GitHub 上に公開している JavaScript のスタイルガイドです。コードのフォーマットに対する規約および、バグを防止するための規約を定めています。あわせて、これらの規約に従うための ESLint の設定が公開されています。 | ||
|
||
- [Vue.js スタイルガイド :material-open-in-new:](https://ja.vuejs.org/style-guide/){ target=_blank } | ||
|
||
Vue.js が公式に提供するスタイルガイドです。 JavaScript に対する規約ではカバーできない Vue 固有の記法について、エラーの発生やアンチパターンを避けるための規約を優先度別に定めています。 これらの規約への違反を検出するための ESLint のプラグインも公式に提供されています。 | ||
|
||
- [CSS specifications :material-open-in-new:](https://www.w3.org/Style/CSS/current-work){ target=_blank } | ||
|
||
W3C が策定する CSS の標準仕様です。 Stylelint では、この標準仕様に従うための設定が公開されています。 | ||
|
||
上記のコーディング規約は静的コード解析ツールによって自動的にチェックできるようにします。 | ||
バックエンド側では、 Checkstyle を使用して Google Java Style への準拠を自動チェックし、 | ||
SpotBugs を利用して、 SpotBugs が提供するバグパターンに該当するコードを自動検知します。 | ||
加えて、 VS Code の自動フォーマット機能を利用することで、コーディング中に Google Java Style へ準拠したフォーマットへと自動でコードを修正します。 | ||
フロントエンド側では Prettier 、 ESLint 、 Stylelint を利用してコーディング規約の自動チェックを行っています。 | ||
コーディング規約の内容および静的コード解析ツールの詳しい設定方法については、以下のページとサンプルアプリの実装を確認してください。 | ||
|
||
- [Checkstyle プラグイン](../how-to-develop/java/common-project-settings.md#checkstyle-plugin) | ||
- [SpotBugs プラグイン](../how-to-develop/java/common-project-settings.md#spotbugs-plugin) | ||
- [Java formatting and linting :material-open-in-new:](https://code.visualstudio.com/docs/java/java-linting){ target=_blank } | ||
- [静的コード分析とフォーマット(Vue.js)](../how-to-develop/vue-js/static-verification-and-format.md) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.