> For the complete documentation index, see [llms.txt](https://coky-t.gitbook.io/owasp-asvs-ja/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coky-t.gitbook.io/owasp-asvs-ja/owasp-apurikshonsekyuriti-50/0x93-appendix-d_recommendations.md).

# 付録 D: 推奨事項

## はじめに

アプリケーションセキュリティ検証標準 (ASVS) のバージョン 5.0 を準備する中で、5.0 の要件に含めるべきではない既存および新規に提案された項目が多数あることが明らかになりました。これは 5.0 の定義により ASVS のスコープではないか、あるいは、良いアイデアであったとしても、必須とすることはできないと考えたためです。

これらの項目を完全に失いたくはなかったので、この付録にその一部を収めました。

## 推奨される、スコープ内のメカニズム

以下の項目は ASVS のスコープ内です。これらを必須にすべきではありませんが、セキュアアプリケーションの一部として考慮することを強くお勧めします。

* パスワード強度メーターを提供して、ユーザーがより強力なパスワードを設定できるようにする。
* アプリケーションのルートまたは .well-known ディレクトリに一般に利用可能な security.txt を作成して、セキュリティ問題について所有者に連絡するためのリンクまたは電子メールアドレスを明確に定義する。
* 信頼できるサービス層でのバリデーションに加えて、クライアントサイドの入力バリデーションを実施すべきである。これは何者かがアプリケーションを攻撃しようとしてクライアントサイドのコントロールをバイパスしたことを発見する良い機会を提供するためである。
* robots.txt ファイル、X-Robots-Tag レスポンスヘッダ、または robots HTML meta タグを使用して、間違ってアクセス可能な機密ページが検索エンジンに表示されることを防ぐ。
* GraphQL を使用する場合、認可ロジックを GraphQL やリゾルバレイヤではなくビジネスロジックレイヤで実装して、個別のインタフェースごとに認可を処理する必要がないようにする。

参考情報:

* [RFC へのリンクを含む security.txt の詳細情報](https://securitytxt.org/)

## ソフトウェアセキュリティの原則

以下の項目は以前 ASVS にありましたが、実際には要件ではありません。むしろ、セキュリティコントロールを実装する際に考慮すべき原則であり、これに従うと、より堅牢なコントロールにつながります。以下があります。

* セキュリティコントロールは集中管理され、簡潔 (経済的設計) で、検証可能で、セキュアで、再利用可能であるべきです。これによりコントロールの重複、欠落、効果がないものを回避できます。
* 可能な限り、ゼロからコントロールを実装するのではなく、前もって作成され、十分に精査されたセキュリティコントロール実装を使用します。
* 理想的には、保護されたデータおよびリソースにアクセスするために、単一の十分に検証されたアクセス制御メカニズムを使用すべきです。コピー＆ペーストやセキュアではない代替パスを回避するために、すべてのリクエストはこの単一のメカニズムを通過すべきです。
* 属性または機能ベースのアクセス制御は推奨パターンであり、コードが単に役割ではなく機能やデータ項目に対するユーザの認可を確認しています。権限は引き続き役割を使用して割り当てるべきです。

## ソフトウェアセキュリティプロセス

ASVS 5.0 から削除されたセキュリティプロセスが多数ありますが、それはまだ良いアイデアです。これらのプロセスを効果的に実装する方法については、OWASP SAMM プロジェクトが優れた情報源となるかもしれません。以前 ASVS に含まれていた項目には以下のものがあります。

* 開発のすべての段階でセキュリティに対処するセキュアソフトウェア開発ライフサイクルを使用する。
* 脅威を特定し、対応策を計画し、適切なリスク対応を促進し、セキュリティテストをガイドするために、設計変更やスプリント計画ごとに脅威モデリングを使用する。
* すべてのユーザストーリーと機能に「ユーザとして、自分のプロフィールを閲覧および編集できる必要がある。他の人のプロフィールを閲覧または編集できないようにする必要がある」のような機能的なセキュリティ制約が含まれている。
* セキュアコーディングチェックリスト、セキュリティ要件、ガイドライン、ポリシーがすべての開発者とテスト担当者に利用可能である。
* アプリケーションのソースコードには、バックドア、悪意のあるコード (サラミ攻撃、ロジックボム、時限爆弾など)、文書化されていない機能や隠された機能 (イースターエッグ、安全でないデバッグツールなど) がないことを確認するための継続的なプロセスが存在する。このセクションに準拠するには、サードパーティライブラリを含むソースコードへの完全なアクセスなしには不可能であり、したがって、最高レベルのセキュリティを必要とするアプリケーションにのみ適していると考えられる。
* デプロイされた環境における構成のドリフトを検出し、対応するためのメカニズムが導入されている。これには、不変のインフラストラクチャ、安全なベースラインからの自動再デプロイメント、承認された構成と現在の状態を比較するドリフト検出ツールの使用を含むことがある。
* すべてのサードパーティ製品、ライブラリ、フレームワーク、サービスにおいて、それぞれの推奨事項に従って、設定の堅牢化が実行されている。

参考情報:

* [OWASP Threat Modeling Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Threat_Modeling_Cheat_Sheet.html)
* [OWASP Threat modeling](https://owasp.org/www-project-threat-modeling/)
* [OWASP Software Assurance Maturity Model Project](https://owasp.org/www-project-samm/)
* [Microsoft SDL](https://www.microsoft.com/en-us/securityengineering/sdl/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://coky-t.gitbook.io/owasp-asvs-ja/owasp-apurikshonsekyuriti-50/0x93-appendix-d_recommendations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
