[CTX]
[ALL]
Server Side Include in
SHTML files
SHTML ファイルでのサーバーサイドの実装 (SSI)
元 HTTP-DeleGate で、接尾辞 ".shtml" のつくローカルファイルは、
ファイル名に ".html" のつく HTML ファイルのように扱われますが、そこに含まれる
サーバーサイドの実装 (SSI) 用の特別なタグと META タグは、
HTTP-DeleGate によって解釈・置換後、クライアントに送信されます。
SSI タグ
- <!--#echo var="varName" -->
-
varNameで指定された値で置換されます。
varName は、次のような、
"REMOTE_HOST" または、"HTTP_SERVER"
と同様な、任意の CGI 互換名です。
- DATE_GMT -- GMT 現在時刻
- DATE_LOCAL -- サーバーホストのローカルな現在時刻
- LAST_MODIFIED -- .shtml ファイルの最終更新時間
- REFERER -- HTTP_REFERER と同じ
- DOCUMENT_NAME -- SCRIPT_NAME と同じ
- DOCUMENT_URI -- REQUEST_URI と同じ
- * -- 組みとなる name=value の変数すべて
- <!--#include virtual="URL" -->
-
"virtual" 属性で指定されたデータに置換されます。
"virtual" は、"proto://server/upath" のような完全な URL または、
"/upath" のような部分 URL にでき、
http://delegate/upath として、
解釈されます。
"/" で始まらない "upath" のような相対 URL は、shtml ファイルの
基点 (現在の) に対する相対として、解釈されます。
注)クライアントユーザーに対する DeleGate(元サーバーまたはプロキシー)
による通常のアクセス制御下の SSI によるリソースが含まれます。
それは含まれるリソースのアクセスが拒否されます。
SSI-include 経由でも拒否されます。
virtual=http://exserver/dir/fileX のような DeleGate サーバーの管轄外リソースを含むことを許可するのは
SHTML 書込みのようにユーザーによるセキュリティーホールを作ります。
元サーバーのとき、SSI-includeプロキシーとしての転送は RELAY=no によって拒否される必要がありますが、
他のサーバーからでも SSI-include で拒否されます。
バージョン9での簡単な方法は
RELAY="proxy:http:exserver:*"
のように制限した RELAY を追加することで、exserver のみへのリレーを許可します。
他の安全な方法は、
MOUNT="/ex/* http://exserver/dir/*" の後に
virtual="/ex/fileX" のような SSL-include を書きます。
しかしながら、双方とも exserver の意図された仮想 URL 外のリソースに
アクセスすることをクライアントユーザーに許可します。
バージョン10 において上記問題の対処するため、RELAY=no とともに使う RELAY=ssi が追加されました。
RELAY=ssi は SHTML を書く者に他のサーバーからの物を追加でき、
クライアントユーザーの許可は変化しません(RELAY=no と同じ)。
RELAY=ssi 無しで言えば、あなた(DeleGate 管理者としての)は SHTML を書く者が
他のサーバーを含めるのを防げます。
RELAY=ssi:protocolList:serverList:clientList
のような DeleGate の汎用表記で追加可能な対象サーバー(プロトコル、クライアントも)
を制限することもできます。
バージョン10 での他の(そしてもっと重要かもしれない)拡張は、SSI-include 経由の
サーバーとクライアント間前後の要求・応答メッセージヘッダ(Cookie や User-Agent)をリレーすることです。
注)多分、プラットフォームや言語によらない方法で任意のサーバーにアクセスする CGI を禁止することは不可能です。
ですが、少なくとも、
REMITTABLE="+,-cgi".
で CGI 自体を禁止することができます。
- <!--#fsize virtual="URL" -->
- <!--#flastmod virtual="URL" -->
-
それぞれ、指定したデータのサイズまたは、
最終更新時間で、置換されます。
- <!--#config timefmt=timeFormat -->
-
"#echo", "#flastmod" などによって生成される時間文字列の書式を、
strftime(3) 互換の書式で指定します。
(default: timefmt="%a, %d %b %Y %H:%M:%S %z")
META タグ
- <META HTTP-EQUIV=fieldName content="filedBody">
-
HTTP 応答メッセージに "fieldName: fieldBody" ヘッダーを生成します。
fileBody 内の以下のパターンは、上述のものに置換されます。
- ${varName} or
<!--#echo var=varName -->
- ${flastmod:URL} or
<!--#flastmod virtual=URL -->
- ${fsize:URL} or
<!--#fsize virtual=URL -->
- ${include:URL} or
<!--#include virtual=URL -->
- 例)
- <META HTTP-EQUIV=Status content="200 OK">
- <META HTTP-EQUIV=Content-Type content="text/html">
- <META HTTP-EQUIV=Pragma content="no-cache">
- <META HTTP-EQUIV=Date content="${DATE_GMT}">
- <META HTTP-EQUIV=Last-Modified content="${flastmod:URL}">