OWASP ASVS読み込んでみる(V3: セッション管理の検証要件)

## これは何？
どうもさばかんです。

ちなみにこれをやり始めた理由は興味半分、趣味半分です。(完全に私利私欲)


以下のリンクの文書を読み込んでいこうと思います。

[OWASP ASVS v4.0.3 PDF（直接ダウンロード注意）](https://raw.githubusercontent.com/OWASP/ASVS/v4.0.3/4.0/OWASP%20Application%20Security%20Verification%20Standard%204.0.3-en.pdf)

個人的な備忘録なため誤った理解などもあると思います。

コメントなどでご指摘いただけると幸いです。

また本記事は以下の構成で作成しています。


> ASVS本文

```
ChatGPTによる日本語翻訳
```
ひとこと：
気分次第で入れていきます。


---
##  冒頭
**Session management is the set of controls that governs the creation, maintenance, and termination of sessions.**

> **A session is a temporary context for a user with the application that should be maintained securely to prevent unauthorized users from impersonating legitimate users.**


```
日本語訳：

セッション管理とは、セッションの作成・維持・終了を制御するための一連のコントロールのことを指します。

セッションは、ユーザーとアプリケーションの間に一時的に形成されるコンテキストであり、

正当なユーザーになりすまそうとする不正ユーザーを防ぐため、安全に維持されるべきです。
```
ひとこと：
セッションについての章何だなぁって感じです。

これからはいつもの如くまとめていきます。



----
- V3.1 **明確な理由がない限りフレームワークディフォルのセッション管理を使ってね**
- V3.2 **ユーザーがログアウトしたらセッション無効にしてね**
- V3.3 **エラーなどにセッションID,エラーメッセージログに表示しないようにしてね**
- V3.4 **セッションIDがURLとかエラーログに表示されないようにしてね**
- V3.5 **認証済みのセッショントークンはTLSなどの安全な送信経路か確認してね**
- V3.6 **認証済みのセッショントークンには有効期限を定義して、期限過ぎたら無効化してね**
- V3.7 **有効なセッションIDのみを受け付けてるか確認してね**
- V3.8 **CookieベースのアクセストークンはSecure属性が付与されているか確認してね**
- V3.9 **CookieベースのアクセストークンはJSから抜き取られないようにするためにHttpONLY属性が付与されてるか確認してね**
- V3.10 **CookieベースのアクセストークンはSameSite属性を設定してStrictかLaxを使用してね**
- V3.11 **セッションのアイドルタイムアウトは15分以内にしてね**
- V3.12 **絶対的なセッションタイムアウトは妥当な長さに設定されているか確認してね**
- V3.13 **ログアウト、アイドルタイムアウト、絶対タイムアウトのイベント等の時にセッションがサーバー側で無効化されているか確認してね**


> **V3.1 Verify that the framework’s default session management control is used unless there is an explicit reason to use a custom implementation.**

```
日本語訳

フレームワークのデフォルトのセッション管理機構が使用されており、

明確な理由がある場合を除き、独自実装が使われていないことを確認してください。

```
ひとこと：
これもV1で書いていた、できる限り「自己流を使うな」に通じるものがありますね

> **V3.2: Verify that sessions are invalidated when the user logs out.**

```
日本語訳

セッションは、ユーザーがログアウトした際に無効化（無効に）されることを確認してください。
```



> **V3.3:Verify that the session id is never disclosed in URLs, error messages, or logs.**

```
日本語訳：
セッションIDが、URL・エラーメッセージ・ログなどに一切表示されないことを確認してください。
```
ひとこと:

セッションIDとかがエラーに表示されるとかなり危ないですもんね...

> **V3.4: Verify that the session id is long, random, and unique to prevent session guessing attacks.**

```
日本語訳
セッションIDが長く、ランダムで、一意であることにより、

セッション推測攻撃を防げるようになっていることを確認してください。
```


> **V3.5:Verify that authenticated session tokens are only transmitted over secure channels (e.g., TLS).**


```
日本語訳
認証済みセッションのトークンが、TLSなどの安全な通信経路のみで送信されることを確認してください。
```

> **V3.6:Verify that authenticated session tokens have a defined expiration date and that the tokens are invalidated after expiration.**

```
日本語訳
認証済みのセッショントークンには有効期限が定義されており、

その期限を過ぎた後はトークンが無効化されることを確認してください。
```

> **3.7:Verify that the session termination endpoint (e.g., logout or session end) is authenticated and only accepts valid session identifiers.**

```
日本語訳

ログアウトやセッション終了のエンドポイントは認証されており、

有効なセッションIDのみを受け付けることを確認してください。
```


> **V3.8: Verify that cookie-based session tokens use the “Secure” attribute.**

```
日本語訳

クッキーベースのセッショントークンには、“Secure” 属性が付与されていることを確認してください。
```
ひとこと：
つまり、HTTPSとかみたいな暗号化したもので送ってねって意味ですね。
平文でセッションID飛ぶのは色々怖いですもんね
セッションジャックも防げます。


> **V3.9:Verify that cookie-based session tokens use the “HttpOnly” attribute.**


```
日本語訳

クッキーベースのセッショントークンには、“HttpOnly” 属性が付与されていることを確認してください。
```
ひとこと：
クロスサイトスクリプティング(XSS)対策になるそうです。


> **V3.10: Verify that cookie-based session tokens use the “SameSite” attribute with the value “Strict” or “Lax”.**

```
日本語訳

クッキーベースのセッショントークンには、SameSite 属性が設定されており、

その値として “Strict” または “Lax” が使用されていることを確認してください。
```

ひとこと：
SameSite属性とは？
Cookieの属性一つでありCSRFを防ぐものらしいです。

https://qiita.com/tsubasa_k0814/items/3d36822463eda4f6becc

より文章を引用

その中で属性
``Strict`` 　→ 他サイトから一切の通信を送れない
`Lax`  → GETリクエストなど限定的な条件では許可


> **V3.11: Verify that the session idle timeout is 15 minutes or less.**

```
日本語訳

セッションのアイドルタイムアウト（操作がない状態での自動ログアウト）は、15分以内に設定されていることを確認してください。
```


> **V3.12: Verify that the absolute session timeout is set to an appropriate duration based on the risk profile of the application.**


```
日本語訳

絶対的なセッションタイムアウトが、アプリケーションのリスクプロファイルに応じて適切な長さに設定されていることを確認してください。
```

> **V3.13: Verify that the session is invalidated on the server after the logout, idle timeout, and absolute timeout events.**


```
日本語訳

ログアウト、アイドルタイムアウト、絶対タイムアウトの各イベントの後に、

セッションがサーバー側で無効化されることを確認してください。
```



## 最後に

ここまでのみてくださりありがとうございました。

以下に関連リンク貼っておりますので、ぜひご覧ください。

https://qiita.com/nanashi39/items/949602d87b4b61477835

https://qiita.com/nanashi39/items/7ab2c3ff443ff3d01565

https://qiita.com/nanashi39/items/653568c96cedbdab7a9c