/
910.txt
160 lines (118 loc) · 8.21 KB
/
910.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
[1] [DFN[[CODE(HTTP)@en[[[Server:]]]]]] [[ヘッダー]]は、
[[要求]]を処理して[[応答]]を[[生成]]した[[起源鯖]]の[[ソフトウェア]]の名前や版を表します。
[24] [[要求メッセージ]]で[[利用者エージェント]]を表す
[CODE(HTTP)@en[[[User-Agent:]]]] [[ヘッダー]]に相当するもので、構文も同じです。
* 仕様書
[REFS[
- [9] '''[CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-08-07 05:54:02 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-7.4.2>'''
- [25] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-08-07 05:54:02 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-9.6>
]REFS]
* 意味
[10] [CODE(HTTP)@en[[[Server:]]]] [[ヘッダー]]は、
[[起源鯖]]が[[要求]]を処理するために使った[[ソフトウェア]]の情報を含みます [SRC[>>9]]。
[11] この[[ヘッダー]]は、[[クライアント]]が[[相互運用性]]の問題の範囲を特定するのを補助したり、
特定の[[鯖]]の制限に対処するために使ったりすることがあります [SRC[>>9]]。
[18] モジュール化された[[鯖]]では、[[起源鯖]]本体だけでなく、
モジュールの情報も値に含まれることがあります。
[EG[
[19] 例えば [[Apache]] は
[PRE(HTTP code)[
Server: Apache/2.2.6 (Unix) mod_ssl/2.2.6 PHP/5.3.6
]PRE]
... のような [CODE(HTTP)@en[[[Server:]]]] [[ヘッダー]]を[[生成]]することがあります。
]EG]
[17] [[起源鯖]]は、必要以上の詳細を含む [CODE(HTTP)@en[[[Server:]]]]
[[ヘッダー]]を[[生成]]する[['''べきではなく''']]、
第三者の部分製品が値を追加することを制限する[['''べきです''']]。
長すぎると[[応答]]の[[遅延]]を増大させてしまいますし、
攻撃者が既知の[[セキュリティーホール]]を探すのを容易にしてしまいます。 [SRC[>>9]]
;; [26] ただし実際にはソフトウェアの版情報がなくとも攻撃者は[[セキュリティーホール]]を探していることも指摘されています
[SRC[>>25]]。
[EG[
[20] 例えば、
[PRE(HTTP code)[
Server: Apache/2.4.10 (Unix) OpenSSL/1.0.1i
]PRE]
... のような [CODE(HTTP)@en[[[Server:]]]] [[ヘッダー]]が実際に使われていますが、
[[OpenSSL]] を [[HTTP]] [[起源鯖]]のソフトウェア名の一部として記述するのが妥当なのかは怪しいところです。
]EG]
* 構文
[14] 1つ以上の [CODE(ABNF)@en[[[product]]]] または [CODE(ABNF)@en[[[comment]]]]
を、 [[RWS]] 区切りで並べたものとされています。ただし、最初の1つは
[CODE(ABNF)@en[[[product]]]] でなければなりません。 [SRC[>>9]]
[FIG(railroad)[
= [CODE(ABNF)@en[[[product]]]]
= *
== [[RWS]]
== |
=== [CODE(ABNF)@en[[[product]]]]
=== [CODE(ABNF)@en[[[comment]]]]
]FIG]
[15] ここで [CODE(ABNF)@en[[[product]]]] は、[[起源鯖]]のソフトウェアと主要な部分製品を識別上の重要なものから順番に並べたもの
[SRC[>>9]] とされています。
;; [16] この構文は [CODE(HTTP)@en[[[User-Agent:]]]] [[ヘッダー]]と同じです。
[CODE(HTTP)@en[[[User-Agent:]]]] と同じく、必ずしもこの構文は守られていません。
ただ[[利用者エージェント]]の多様性に比べ[[起源鯖]]の種類は多くないので、
この構文に適合する [CODE(HTTP)@en[[[Server:]]]] [[ヘッダー]]はかなり多い印象です。
* 文脈
[12] [[起源鯖]]は [CODE(HTTP)@en[[[Server:]]]] [[ヘッダー]]を[[生成]]して構いません
[SRC[>>9]]。
;; [13] 多くの[[鯖]]が[[生成]]するようですが、[[必須]]ではないようです。
* 歴史
[FIG(quote)[
[FIGCAPTION[
[3] RFC 1945 (HTTP/1.0) 10.14; RFC 2068 (HTTP/1.1) 14.39; RFC 2616 (HTTP/1.1) 14.38 Server
]FIGCAPTION]
> The Server response-header field contains information about the
software used by the origin server to handle the request. The field
can contain multiple product tokens (Section [DEL[[INS[{1945}]] 3.7]] [INS[3.8]]) and comments
identifying the server and any significant subproducts. [DEL[[INS[{1945}]] By convention, the]] [INS[The]]
product tokens are listed in order of their significance for identifying the application.
[CODE(HTTP)[Server]] [[応答頭欄]]は、[[起源鯖]]で[[要求]]を取り扱うために使われているソフトウェアについての情報を含めます。
この欄は、複数の [CODE(ABNF)[[[product]]]] 字句およびサーバーと重要な部分製品を識別する[[注釈]]を含めることができます。
[CODE(ABNF)[product]] 字句は、その応用を識別するのに有意な順に列挙します。
>
- Server = "Server" ":" 1*( product | comment )
> Example:
- Server: CERN/3.0 libwww/2.17
> If the response is being forwarded through a proxy, the proxy
application [DEL[[DEL[{1945}]] must not add its data to the product list]] [INS[[INS[{2068,2616}]] MUST NOT modify the Server response-header]]. [INS[Instead, it [DEL[[INS[{2068,2616}]] SHOULD]] [INS[[INS[{Errata}]] MUST]] include a Via field (as described in section [DEL[[INS[{2068}]] 14.44]] [INS[[INS[{2616}]] 14.45]]).]]
応答が[[串]]を通じて転送される時には、串応用は [CODE(HTTP)[Server]]
応答頭を修正しては'''なりません'''。
代わりに、 [CODE(HTTP)[[[Via]]]] 欄を含めなければ'''なりません'''。
> Note: Revealing the specific software version of the server [DEL[may]] [INS[[INS[{2616}]] might]]
allow the server machine to become more vulnerable to attacks
against software that is known to contain security holes. Server
implementers are encouraged to make this field a configurable option.
注意: 鯖の特定ソフトウェアの版を晒すと、既知の安全上の穴があるソフトウェアへの攻撃に関してより脆弱になってしまうかもしれません。
鯖実装者はこの欄を設定可能な選択肢とすることを推奨します。
[DEL[
> [INS[{1945}]] Note: Some existing servers fail to restrict themselves to the
product token syntax within the Server field.
注意: 既存の鯖の中には [CODE(HTTP)[Server]] 欄の [CODE(ABNF)[product]]
字句構文に反しているものもあります。
]DEL]
]FIG]
[2] [CITE@en[RFC 3507 - Internet Content Adaptation Protocol (ICAP)]]
( ([TIME[2014-06-08 07:17:07 +09:00]] 版))
<http://tools.ietf.org/html/rfc3507#section-4.3.3>
* 関連
[7]
[[CGI]] ではほぼ相当する[[メタ変数]] [CODE(CGI)[[[SERVER_SOFTWARE]]]] があります。
[21] [[要求メッセージ]]には[[利用者エージェント]]を表す [CODE(HTTP)@en[[[User-Agent:]]]]
[[ヘッダー]]があります。
[22] [[串]]は [CODE(HTTP)@en[[[Via:]]]] [[ヘッダー]]にソフトウェア名を記述できます。
[23] [[鯖]]の裏側で実際に処理を行う[[アプリケーションサーバー]]の類の情報は、
[CODE(HTTP)@en[[[Server:]]]] には記述せず、 [CODE(HTTP)@en[[[X-Powered-By:]]]]
や [CODE(HTTP)@en[[[X-Framework:]]]] のような[[ヘッダー]]に記述するのが一般的です。
[[鯖]]のモジュールとして動作する [[PHP]] や [[mod_perl]] などは
[CODE(HTTP)@en[[[Server:]]]] に現れる場合と [CODE(HTTP)@en[[[X-Powered-By:]]]]
などに現れる場合、両方に現れる場合があります。いずれにせよ[[アプリケーションサーバー]]上で実際に動く
([[言語]]や[[フレームワーク]]の類ではない) 実際の[[アプリケーション]]の名前が記載されることはあまりないようです。
* 例
- [4] [CODE(HTTP)[Server: WebLogic 5.1.0 Service Pack 11 11/20/2001 08:39:10 #149952]] (不正!)
- [5] [CODE(HTTP)[Server: Apache/1.3.27 (Unix) (Vine/Linux) mod_gzip/1.3.19.1a mod_ssl/2.8.12 OpenSSL/0.9.6k PHP/4.2.3]] ※SSL は組み込んでいるけど有効にしていません。
- [6] [CODE(HTTP)[Server: Jigsaw/2.2.2]]
* メモ
[8]
[CITE[Kazuho@Cybozu Labs: サーバシグニチャは隠さないのが当たり前]] ([TIME[2007-09-08 09:04:25 +09:00]] 版) <http://labs.cybozu.co.jp/blog/kazuho/archives/2007/09/re_server_sig.php>