shtml と asp にはいくつかの類似点があり、asp の命令と同様に、いくつかの SSI 命令が使用されます。クライアントがこれらの shtml ファイルにアクセスするときは、
サーバーはこれらの SHTML ファイルを読み取って解釈し、SHTML ファイルに含まれる SSI 命令を解釈します。たとえば、SHTML ファイル内の SSI 命令を使用して他の HTML ファイル (#include) を参照すると、サーバーはそれをクライアントに送信します。すでに SHTML として解釈されているファイルには SSI ディレクティブがありません。 HTMLにはない機能、つまりHTMLの進化系ともいえる動的
を実現できるSHTMLを実現しています。 Sina のニュース システムはこんな感じです。ニュースの内容は固定ですが、掲載されている広告やメニューは #include で参照します。
現在、主に次のような用途があります:
1. サーバー側の環境変数を表示する
2. ドキュメントにテキストコンテンツを直接挿入する
3. WEB ドキュメントを表示する情報 (ファイル作成日/サイズなど)
4. サーバー上の各種プログラムを直接実行 (CGI またはその他の実行可能プログラムなど)
5. SSI を設定します。情報 表示形式 (ファイル作成日/サイズの表示方法など)
Advanced SSI
SSI の使用
SSI は WEB サーバー用に提供されるコマンドのセットであり、これらのコマンドは HTML ドキュメントのコメント コンテンツに直接埋め込むだけで済みます。例:
は、「info.htm」のコンテンツを現在のページにコピーする機能で、訪問者が閲覧すると、他の HTML ドキュメントと同様に情報が表示されます。 .htm コンテンツ。
他の SSI コマンドの使用形式も基本的には先ほどの例と同じで、SSI の使用方法は少しコードを挿入するだけで、非常に簡単であることがわかります。
もちろん、WEB サーバーが SSI をサポートしていない場合、ブラウザはそれを注釈情報として扱い、コンテンツを直接スキップします。
WEB サーバーで SSI 機能を設定するにはどうすればよいですか?
一部の WEB サーバー (IIS 4.0/SAMBAR 4.2 など) では、#include ディレクティブを含むファイルは SSI インタープリターにマップされた拡張子を使用する必要があります。そうしないと、Web サーバーはデフォルトで SSI ディレクティブを処理しません。拡張子 .stm、.shtm、および .shtml はインタープリター (Ssinc.dll) にマップされます。
Apache は設定に応じて次のように srm.conf を変更します。
AddType text/x-server-parsed-html .shtml は .shtml 拡張子を持つファイルの SSI 命令のみを解析します
AddType text/x- server-parsed-html .html は、すべての HTML ドキュメントの SSI 命令を解析します
Netscape WEB サーバーは、管理サーバーを直接使用して SSI 機能を有効にすることができます。
Web サイトはサーバー管理プログラムのマッピング タグを使用しており、拡張子に追加されたコンテンツ タイプは次のとおりです: wwwserver/html-ssi
Cern サーバーは SSI をサポートしていません。SSI 詐欺手法を使用できます。http にアクセスしてください。 ://sw.cse.bris。ac.uk/WebTools/fakessi.html から PERL スクリプトをダウンロードして、CERN サーバーでいくつかの SSI コマンドを使用できるようにします。 (exec コマンドはサポートしていません。)
SSI コマンドの基本フォーマット
SSI コマンドの基本フォーマット:
プログラムコード:
など
プログラムコード:
手順:
1. は HTML 構文のコメントです。WEB サーバーが SSI をサポートしていない場合、この情報は無視されます。
2. #include は SSI ディレクティブの 1 つです。
3. file は include のパラメータ、info.htm はパラメータ値で、このコマンドではインクルードするドキュメントの名前を指します。
注:
1.
このドキュメントの名前: プログラム コード:
今度: プログラム コード:
あなたの IP アドレスはプログラム コード:
#include デモ
機能:
テキスト ファイルのコンテンツをドキュメント ページに直接挿入します。
構文:
プログラムコード:
file ファイル名は相対パスです。このパスは、#include ディレクティブを使用したドキュメントを含むディレクトリに対する相対パスです。インクルードされるファイルは、同じレベルのディレクトリまたはそのサブディレクトリに存在できますが、上位レベルのディレクトリには存在できません。たとえば、現在のディレクトリにある nav_head.htm ドキュメントを表す場合、file="nav_head.htm" となります。
仮想ファイル名は、Web サイト上の仮想ディレクトリへのフル パスです。たとえば、これはサーバードキュメントルートディレクトリの下の hoyi ディレクトリにある nav_head.htm ファイルを表します。これは file="/hoyi/nav_head.htm" です。
パラメータ:
file は、インクルードされるファイルの相対的な場所を指定します。このドキュメントへ
virtual は、サーバー ドキュメントのルート ディレクトリを基準とした相対的な場所を指定します
注:
1. ファイル名には拡張子が必要です。
2. 含まれるファイルには任意の拡張子を付けることができますが、htm 拡張子を直接使用するのが最も便利だと思います (好みに応じて)。
例:
プログラム コード:
現在のページにヘッダー ファイルを挿入します
現在のページにテール ファイルを挿入します
現在のページにヘッダー ファイルを挿入します
現在のページにテール ファイルを挿入します
#flastmod および#fsize デモ
関数: #flastmod ファイルの最終更新日
#fsize ファイルの長さ
構文:
プログラム コード:
パラメータ:
file は、このドキュメントに関連するインクルード ファイルの場所を指定します。たとえば、info.txt は現在のディレクトリ内の info.txt ドキュメントを表します。
virtual は指定します。サーバードキュメントのルートディレクトリからの相対的な場所 /hoyi/info.txt などの場所は
を意味します。 注:
ファイル名には拡張子が必要です。
例:
プログラムコード:
現在のディレクトリにある news.htm ファイルの最新更新日を現在のページに挿入します
プログラムコード:
現在のディレクトリにある news.htm のファイルサイズを現在のページに挿入します
#exec デモンストレーション
機能:
外部プログラムの出力をページに挿入します。使用されるパラメータが cmd か cgi かに応じて、CGI プログラムに挿入したり、通常のアプリケーションへの入力として挿入したりできます。
構文:
プログラムコード:
パラメータ:
cmd 通常のアプリケーション
cgi CGI スクリプトプログラム
例:
プログラムコード:
パスワードファイルを表示します
カレントディレクトリ内のファイル一覧を表示します
CGI プログラム gb.cgi が実行されます。
CGI プログラム access_log.cgi が実行されます。
パスワードファイルが表示されます
カレントディレクトリ内のファイル一覧が表示されます
CGIプログラム gb.cgi が実行されます。
CGI プログラム access_log.cgi が実行されます。
注:
上記の例からわかるように、このコマンドは非常に便利ですが、セキュリティ上の問題もあります。
禁止方法:
. Apache、access.conf
の「Options include ExecCGI」行を削除します。 IIS では、#exec コマンドを無効にするには、SSIExecDisable メタベースを変更します。
#config
機能: クライアント ブラウザに返されるエラー情報の形式、日付、およびファイル サイズを指定します。
構文:
プログラムコード:
パラメータ:
errmsg SSI 実行エラー メッセージを任意の方法でカスタマイズします。
sizefmt ファイル サイズ表示モード。デフォルトはバイト モード (「bytes」) で、キロバイト モード (「abbrev」) に変更できます。
timefmt 時間表示モード。最も柔軟な構成属性です。
例: 存在しないファイルのサイズを表示する
プログラムコード:
千単位 ファイルサイズをバイト単位で表示
プログラムコード:
特定の時刻形式で時刻を表示します
プログラムコード:
曜日、月、時刻を表示します今日のゾーンは
です
今日の曜日、月、タイムゾーンを表示します
XSSI
XSSI (拡張 SSI) は、Apache 1.2 以降の mod-include モジュールに組み込まれている高レベルの SSI ディレクティブのセットです。
利用可能な命令は次のとおりです:
#printenv
#set
#if
#printenv
機能: WEB サーバー環境に現在存在するすべての環境変数を表示します。
構文: プログラム コード:
パラメータ: なし
例:
プログラム コード:
#set
機能: 後続の if ステートメントで使用するために変数に値を割り当てることができます。
構文: プログラム コード:
パラメータ: なし
例: プログラム コード:
#if
機能: データを変更できるページを作成します。データは、if ステートメントを使用するときに計算された要件に従って表示されます。
構文: プログラムコード:
表示内容
表示内容
表示内容
表示内容
表示内容
表示内容
例:
プログラムコード:
サーバー セキュリティ ディスカッション フォーラム http://www.31896.net/ へようこそ。
Fineacer コンピュータ ネットワーク セキュリティ オンライン http://www.fineacer.org/ へようこそ。
サーバー セキュリティ ディスカッション フォーラムへようこそ!
サーバー セキュリティ ディスカッション フォーラム http://www.31896.net/ へようこそ。
Fineacer コンピュータ ネットワーク セキュリティ オンライン http://www.fineacer.org/ へようこそ。
サーバー セキュリティ ディスカッション フォーラムへようこそ!
注: 前のディレクティブで使用されているバックスラッシュは、式の終了として解釈されないように内部引用符を置き換えるために使用されます。省略できません。
1. Config コマンド
Config コマンドは主に SSI のデフォルト設定を変更するために使用されます。その中には次のものがあります:
Errmsg: デフォルトのエラーメッセージを設定します。ユーザーが設定したエラー メッセージを正常に返すには、Errmsg パラメーターを HTML ファイル内の他の SSI コマンドの前に配置する必要があります。そうしないと、クライアントはユーザーが設定したカスタム メッセージではなく、デフォルトのエラー メッセージのみを表示できます。
Timefmt: 日付と時刻に使用される形式を定義します。 Timefmt パラメータは echo コマンドの前に使用する必要があります。
結果は次のとおりです:
2000 年 4 月 12 日水曜日
たぶんユーザーは、上記の例で使用されている %A %B %d にあまり馴染みがありません。以下に、SSI でよく使用される日付と時刻の形式を表形式でまとめます。
Sizefmt: ファイル サイズがバイト、キロバイト、メガバイトのいずれで表現されるかを決定します。バイト単位の場合、パラメータ値は「バイト」です。キロバイトとメガバイトには省略形が使用されます。同様に、sizefmt パラメータは、使用する fsize コマンドの前に配置する必要があります。
2. Include コマンド
Include コマンドは、他のドキュメントから現在解析されているドキュメントにテキストまたは画像を挿入できます。 SSI 全体へのキー。 Include コマンドを使用すると、1 つのファイルを変更するだけでサイト全体が即座に更新されます。
Include コマンドには 2 つの異なるパラメータがあります。
Virtual: サーバー側のドキュメントへの仮想パスを与えます。例:
File: 現在のディレクトリへの相対パスを指定します。「../」は使用できず、絶対パスも使用できません。例:
これには、各ディレクトリに header.html ファイルが含まれている必要があります。
3. Echo コマンド
Echo コマンドは、次の環境変数を表示できます。
DOCUMENT_NAME: 現在のドキュメントの名前を表示します。
表示される結果は次のとおりです。
index.html
DOCUMENT_URI: 現在のドキュメントの仮想パスを表示します。例:
表示される結果は次のとおりです:
/YourDirectory/YourFilename.html
Web サイトが発展し続けるにつれて、URL アドレスがますます長くなり、人々は間違いなく頭痛を覚えます。 。 SSIを使えば全て解決します。 Web サイトのドメイン名と SSI コマンドを組み合わせて完全な URL、つまり次のように表示できるためです。
http://yourdomain
QUERY_STRING_UNESCAPED: エスケープされていない URL を表示します。クライアントから送信されたクエリ文字列では、すべての特殊文字の前にエスケープ文字 "" が付けられます。例:
DATE_LOCAL: サーバーによって設定されたタイムゾーンで日付と時刻を表示します。 config コマンドの timefmt パラメータを組み合わせて出力情報をカスタマイズできます。例:
表示される結果は次のとおりです:
2000 年 4 月 15 日土曜日
DATE_GMT: この関数は、グリニッジ標準時に基づいて日付を返すことを除いて、DATE_LOCAL と同じです。例:
LAST_MODIFIED: 現在のドキュメントの最終更新時刻を表示します。同様に、これは SSI の非常に実用的な機能です。HTML ドキュメントに次のような単純なテキストを追加するだけで、更新時間をページ上に動的に表示できます。
CGI 環境変数
SSI 環境変数に加えて、echo コマンドでは次の CGI 環境変数も表示できます:
SERVER_SOFTWARE :サーバーソフトウェアの名前とバージョンを表示します。例:
SERVER_NAME: サーバーのホスト名、DNS エイリアス、または IP アドレスが表示されます。例:
SERVER_PROTOCOL: クライアント要求で使用されるプロトコル名とバージョン (HTTP/1.0 など) を表示します。例:
SERVER_PORT: サーバーの応答ポートを表示します。例:
REQUEST_METHOD: GET、HEAD、POST などのクライアントのドキュメント要求メソッドを表示します。例:
REMOTE_HOST: 要求された情報を発行したクライアントのホスト名を表示します。
REMOTE_ADDR: リクエスト情報を発行したクライアントのIPアドレスが表示されます。
AUTH_TYPE: ユーザー ID の検証方法を表示します。
REMOTE_USER: 保護されたページにアクセスしたユーザーが使用したアカウント名が表示されます。
4. Fsize: 指定したファイルのサイズを表示します。出力形式は、config コマンドの sizefmt パラメーターを組み合わせてカスタマイズできます。
5. Flastmod: 指定されたファイルの最終変更日を表示し、config コマンドの timefmt パラメーターと組み合わせることができます。出力形式を制御します。
ここでは、flashmod パラメーターを使用して、ページ上のすべてのリンクされたページの更新日を表示できます。方法は次のとおりです。
ファイル
別のファイル
表示結果:
ファイル 2000 年 4 月 19 日
別のファイル 2000 年 1 月 8 日
6. Exec
Exec コマンドは CGI スクリプトまたはシェル コマンドを実行できます。使用法は次のとおりです。
Cmd: /bin/sh を使用して、指定された文字列を実行します。 SSI が includesNOEXEC オプションを使用する場合、このコマンドはブロックされます。
Cgi: CGI スクリプトの実行に使用できます。たとえば、次の例では、サーバーの cgi-bin ディレクトリにある counter.pl スクリプトを使用して、各ページにカウンターを配置します: