AOTAKA's web Copyright(c)AOTAKA 1995-2003 - www.aotaka.jp 更新:2002-11-08

環境変数チェック

RIMNETでは今回、Apatchに鞍替えしたと同時にセキュリティー強化が為され、安易にdateコマンドを使用できなくなってしまいました。そこで注目されるのが「環境変数の読み出し」です。また電子掲示板(BBS)システムなどではIPアドレスがよく表示されますが、そのカラクリを簡単に体験してみましょう。

※表示情報は閲覧のブラウザーでのみ表示され、サーバーには記録されません。
※環境変数は、サーバー側の設定により色の付いている行しか閲覧できません。

1999-12-14 1st
2002-11-08 再掲載


●#echoで抜ける情報(環境変数)

項目 意味/例 結果








DATE_LOCAL S ドキュメントを開いた地方時(LST)
DATE_GMT S ドキュメントを開いた世界時(GMT)
REMOTE_ADDR CS クライアントのIPアドレス
REMOTE_HOST CS クライアントのホスト名
REMOTE_IDENT CS リクエストを送ったユーザー
REMOTE_USER CS リクエストを送った認証名
REMOTE_PORT CS リクエストを送ったポート番号
REQUEST_METHOD CS クライアントから要求された方法 GET,POSTなど
HTTP_REFERER CS リンク元ページURL
HTTP_COOKIE * クッキー
HTTP_USER_AGENT CS 使用ブラウザーの情報
HTTP_ACCEPT CS 表示可能なMIMEタイプ(データのタイプ)
HTTP_ACCEPT_CHARSET * 表示可能な文字セット
HTTP_ACCEPT_LANGUAGE * 表示可能な言語の一覧 ※例 ja,en;q=0.7,fr;q=0.3
QUERY_STRING CS クエリー文字列
QUERY_STRING_UNESCAPED S デコードできない文字列
項目 意味/例 結果




LAST_MODIFIED S ドキュメントの最終更新日
DOCUMENT_NAME * ドキュメントの名前
DOCUMENT_ROOT CS サーバー上での場所
DOCUMENT_URI S URLからドメイン部分を除いたもの
項目 意味/例 結果








HTTP_FORWARDED * プロクシーの場所
HTTP_VIA * プロクシーの種類等
HTTP_X_FORWARDED_FOR * プロクシーを通す前のIP
HTTP_XROXY_CONNECTION

HTTP_CACHE_CONTROL * 接続元(IPアドレス)
HTTP_CLIENT * 接続元(ホスト名)
HTTP_LOCKING * リンク元ページURL
HTTP_X_LOCKING * クッキー
項目 意味/例 結果







SCRIPT_FILENAME CS 実行されるスクリプト名(パス)
SCRIPT_NAME CS スクリプトファイル名(URL)
SERVER_ADMIN CS サーバー管理者 (IDやメールアドレス等を表示)
SERVER_NAME CS サーバー名
SERVER_PORT CS サーバーのポート
SERVER_SOFTWARE CS サーバーソフト名
GATEWAY_INTERFACE CS CGIリビジョン
SERVER_PROTOCOL CS プロトコル名とリビジョン
TZ CS タイムゾーン
項目 意味/例 結果
AUTH_TYPE CS 認証方式
CONTENT_LENGTH CS データ長
CONTENT_TYPE CS コンテントタイプ
HTTP_CONNECTION CS 接続状況
HTTP_HOST CS サーバーホスト名
HTTP_PRAGMA * *
HTTP_UA_CPU * *
HTTP_UA_OS * *
HTTP_UA_COLOR * *
HTTP_UA_PIXELS * *
PATH CS サーバーのパス情報
PATH_INFO CS 拡張パス情報
PATH_TRANSLATED CS PATH_INFOを変換した情報
REQUEST_URI CS リクエストされたファイル名
HTTP_ACCEPT_ENCODING * *
REDIRECT_STATUS * *
REDIRECT_URL * *
SERVER_ADDR * サーバーアドレス
SERVER_SIGNATURE * *
Apache/x.x.x Server at www.kt.rim.or.jp Port 80
DOCUMENT_PATH_INFO * *
USER_NAME * ユーザー名(このページの所有者) ********
HTTP_CLIENT_IP * *
HTTP_EXTENSION * *
HTTP_FORM * *
HTTP_PROXY_CONNECTION * *
HTTPS_KEYSIZE * *
HTTPS_SECRETKEYSIZE * *
HTTPS_SERVER_ISSUER * *
HTTPS_SERVER_SUBJECT * *
INSTANCE_ID * *
INSTANCE_META_PATH * *
KEEP_ALIVE * *
LD_LIBRARY_PATH * *
LOCAL_ADDR * *
PHP_SELF * *
TRANSFER_ENCODING * *
CS…CGI/SSI環境で利用可能、S…SSI環境でのみ利用可能



ついでに抜けるだけ抜いてみました
JavaScript:window.navigator(ブラウザー自身を表すオブジェクト)

JavaScriptでの文書情報(document[i])

JavaScriptでのウィンドウ情報(window[i])

JavaScriptでのスクリーン情報(screen[i]) ※Netscape 4.0以降

JavaScriptでのフレーム情報(frames[i])


ダイアルアップ接続などの固定IPを有さないアクセスでは、実際にこれだけの情報で本人を特定するのは不十分な場合がほとんどですが、これらの情報を元に推測を行うことは可能です。また昨今ではJavaやクッキーを駆使して、アクセスの履歴を取ることも容易となっているため、継続的に調べることはいとも簡単に行えます。

さらに触法行為をした場合は、捜査機関が令状を取ってプロバイダーに情報開示を命令することが可能であり、本人を完全に特定できてしまいますので注意しましょう。


●日付を加工してみよう

RIMNETに限らず、デフォルト(標準状態)の日時は英語式で表されます。しかしこの並び方だと日本人には分かりづらいので、ちゃんと大から小へ並べてみましょう。こちらの方が頭の固いコンピューターちゃんも大喜び(謎)
書式例
<!--#config timefmt="%Y年%m月%d日 %I:%M:%S %p %Z"-->
<!--#echo var="DATE_LOCAL"-->
結果
さてちゃんと「1999年12月08日 01:23:45 AM JST」の様に表示されましたか? しかしAM/PMというのは明確な定義の無い表記法(*1)で今一ベターではありませんので、次に24時間表示を行いましょう。
書式例
<!--#config timefmt="%y年%m月%d日 %H:%M:%S %Z"-->
<!--#echo var="DATE_LOCAL"-->
結果
今度は「99年12月08日 01:23:45 JST」の様に24時間表示になりました。しかしよく見ると西暦が2桁表記になっています。これでは2000年は迎えられません(爆謎) このようにいろいろ表示を変えることができるので是非とも試してみましょう。


(*1) 例えば昼の12時といわれて午前(AM)と午後(PM)の判断は人により違います…っていうか蛇足過ぎ
24時間表現 太政官布告三百三十七号
(明治5年)
Windows
XP
日本工業規格
国際標準ISO
Java 1.2
(12時間表記)
C言語(12時間)
ISO/IEC 9899:1999
00:00 午前00:00 すなわち 午後12:00 午前12:00 12時間表記
無し

00:00:00

23:59:59
00:00 AM 12:00 AM 12:00 AM
00:01 (未定義) 午前12:01 00:01 AM 12:01 AM 12:01 AM
01:00 午前01:00 午前01:00 01:00 AM 01:00 AM 01:00 AM
12:00 午前12:00 午後12:00 00:00 PM 12:00 PM 12:00 PM
12:01 (未定義) 午後12:01 00:01 PM 12:01 PM 12:01 PM
13:00 午後01:00 午後01:00 01:00 PM 01:00 PM 01:00 PM
24:00 午後12:00 - 翌00:00と同じ - -
JIS X 0301:2002(1970制定時は旧X0302に含まれた)、ISO8601:1988(旧3307)では12時間表記を定義しない。
太政官布告三百三十七号は太陽暦の布告を目的とし、午前・午後の明確な区分けは示していない。


●SSIの書式

<!--#command option= "value" --> 説明
#config errmsg 文字列 エラーメッセージの設定を行う
timefmt ※別表(下)参照 時間表示形式の指定
sizefmt bytes,kilobytes
megabytes,abbrev
ファイルサイズ表示形式の指定
(Bytes,KB,MB,自動判別)
#echo var ※別表(上)参照 環境変数の取り込み
#exec cmd 外部コマンド名 シェルコマンドの実行
cgi CGIファイル名 CGIスクリプトの実行
#flastmod file ファイル名 ファイル更新日の表示(ファイル名で指定)
virtual ファイル名 ファイル更新日の表示(絶対パス指定、URLで指定)
#fsize file ファイル名 ファイルサイズの表示(ファイル名で指定)
virtual ファイル名 ファイルサイズの表示(絶対パス指定、URLで指定)
#include file ファイル名 ファイルの取り込み(ファイル名で指定)
virtual ファイル名 ファイルの取り込み(絶対パス指定、URLで指定)
<!--#printenv --> 全環境変数表示 ※Apache1.2以上のみ
<!--#set var="string1" value="string2" --> string1で指定する環境変数にstring2をセットする
※Apache1.2以上のみ
<!--#if expr="条件1" -->
  条件1が真の場合に表示
<!--#elif expr="条件2" -->
  条件1が偽で条件2が真の場合に表示
<!--#else -->
  条件1,2ともに偽の場合に表示
<!--#endif -->
条件分岐 ※Apache1.2以上のみ
if〜elseif〜else〜endifを表す。
最後はendifで閉じる。
timefmt引数(抜粋)
項目 引数 結果
西暦年 %Y (yyyy形式) %C(上2桁) %y (2桁)
%m (01~12) %B (January~) %b (Jan~)
%d (01~31)
%H (00~23) %I (00~11) %p (AM~PM)
%M (00~59)
%S (00~59) %s (time_t形式)
曜日 %A (Sunday~) %a (Sun~)
%D mm/dd/yy形式の日付
%T HH:MM:SS形式の時刻
%c LC_TIMEで指定されている形式
%r hh:MM:SS AM
%Z タイムゾーン





[ index ]