docs/guide-ja/security-best-practices.md updated [ci skip] (#13481)

This commit is contained in:
Nobuo Kihara
2017-01-31 17:52:35 +09:00
committed by Alexander Makarov
parent 4187718c14
commit aa00aada82

View File

@ -227,3 +227,46 @@ H5BP プロジェクトが提供する構成例を参考にすることも出来
- [Apache](https://github.com/h5bp/server-configs-apache).
- [IIS](https://github.com/h5bp/server-configs-iis).
- [Lighttpd](https://github.com/h5bp/server-configs-lighttpd).
サーバの構成をセキュアにする
----------------------------
この節の目的は、Yii ベースのウェブサイトをホストするサーバの構成を作成するときに、
考慮に入れなければならないリスクに照明を当てることにあります。
ここで触れられる問題点以外にも、セキュリティに関連して考慮すべき構成オプションがあるかもしれません。
この節の説明が完全であるとは考えないで下さい。
### `Host` ヘッダ攻撃を避ける
[[yii\web\UrlManager]] や [[yii\helpers\Url]] のクラスは、リンクを生成するために [[yii\web\Request::getHostInfo()|現在リクエストされているホスト名]] を使うことがあります。
って
ウェブサーバが `Host` ヘッダの値とは無関係に同じサイトとして応答するように構成されている場合は、
この情報は [HTTP リクエストを送信するユーザによって偽装され](https://www.acunetix.com/vulnerabilities/web/host-header-attack) て、信頼できないものになっている可能性があります。
そのような状況においては、ウェブサーバの構成を改修して、指定されたホスト名に対してのみ応答するようにするか、
または、`request` アプリケーションコンポーネントの [[yii\web\Request::setHostInfo()|hostInfo]] プロパティを設定して、ホスト名の値を設定ないしフィルタするか、
どちらかの対策を取るべきです。
サーバの構成についての詳細な情報は、ウェブサーバのドキュメントを参照して下さい。
- Apache 2: <http://httpd.apache.org/docs/trunk/vhosts/examples.html#defaultallports>
- Nginx: <https://www.nginx.com/resources/wiki/start/topics/examples/server_blocks/>
サーバの構成にアクセスする権限がない場合は、このような攻撃に対して防御するために、[[yii\filters\HostControl]] フィルタを設定することが出来ます。
```php
// ウェブアプリケーション構成ファイル
return [
'as hostControl' => [
'class' => 'yii\filters\HostControl',
'allowedHosts' => [
'example.com',
'*.example.com',
],
'fallbackHostInfo' => 'https://example.com',
],
// ...
];
```
> Note: 「ホストヘッダ攻撃」に対する保護のためには、常に、フィルタの使用よりもウェブサーバの構成を優先すべきです。
[[yii\filters\HostControl]] は、サーバの構成が出来ない場合にだけ使うべきものです。