正規表現、Webページに対するアクセス制御

					2008年06月24日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2008/2008-06-24
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■補足

楽することの大切さ。 授業休むのは、長期的には楽したことにはなっていない。 (授業休んでアルバイトに行ったら赤字になる。)

情報科学類として、楽するとは、人間の仕事をなるべくコンピュータにやらせること。

コンピュータのために、人間がやる仕事が増えるのは、おかしいと考えること。 ただし、楽をするためには、少しの努力/勉強が必要になる。

宿題や試験の考え方

2種類の知識 後者が大事。それには、前者をある程度溜め込む必要がある。

試験について

メモ用紙の作り方

■復習

grep コマンド、 Emacs 文字列の置換え、

■正規表現(regular expression)

単純な検索 正規表現の例:「^a.*tion$」。「aで始まり、tionで終わるもの」。

^」、「.」、「*」、「$」 は、 メタキャラクタ。特別の意味を持つ。 メタキャラクタを含まない文字列も、正規表現として意味を持つ。

◆種類

種類
grep系
grep, ed, vi, ex, sed, less (lv)
egrep系
egrep, awk
Emacs
emacs
シェル系
csh, tcsh, sh
その他
Perl, Ruby, Apache, ....
シェルの「*,?,[]」などは、単にワイルドカードではなく、正規表現に 近い。複数の場所に「*」が書けるので、単なるワイルドカードではな い。

◆grep系の正規表現

grep は、文字列を検索するコマンド。

grep使われている正規表現

\
続く文字(メタキャラクタ)の意味をなくす
^
行の先頭。([]の中で使われたときには否定の意味)
$
行の終わり
.
任意の1文字
[c1c2c...cn]
c1c2c...cn のどれか。 例:[abc]ならabcのどれか。
[c1-c2]
c1からc2 の範囲のどれか。 例:[a-z]ならaからzまでのアルファベットの小文字。
[^c1c2c...cn]
並べられた文字以外。 例:[^abc]ならaでもなくbでもなくcでもないもの。
正規表現*
直前の「正規表現」の任意の繰り返し。 例:.*なら任意の文字の任意回数の繰り返し。 [a-z]*ならアルファベット小文字の任意回数の繰り返し。
正規表現1正規表現2
正規表現1に続き正規表現2が続く 例:abなら、「a」に続き「b」。
\(正規表現\)
タグ付き正規表現。 例: X\(abc\)*X は、XabcabcXにマッチする。
\N
N番目のタグ付き正規表現。 例: X\(abc\)\1X は、XabcabcXにマッチする。
\<
単語の先頭。vi, ex のみ。
\>
単語の終わり。vi, ex のみ。
正規表現 マッチする例 マッチしない例
abc abc, abcd ab
\\abc \abc, \abcd \ab
a.c aac, abc, xabc ac, a, c,
a*c c, ac, axc, aaac, xc a
[abc]x ax, bx, XaxX dx
[^abc]x dx, ex bx, Xbx, abx

◆egrep系

言語理論で定義された正規表現のうち、grep では使えなかったものがが使えるようになった。 ただし、一部、grep よりも落ちる。
正規表現+
正規表現の1回以上の繰り返し。「正規表現 正規表現*」と同じ。
正規表現?
正規表現が0回、または、1回。
正規表現1|正規表現2
正規表現1かまたは正規表現2。orの意味。
(正規表現)
正規表現のグループ化。
タグ付き正規表現\(\)やその参照\Nは廃止された。

◆Emacs の正規表現

grep系、egrep系の組み合わせ。|の意味が違い、egrepで |と書く所、Emacs では \|と書く。egrep で \|と書く所では、Emacs では|でよい。
正規表現1\|正規表現2
正規表現1かまたは正規表現2。orの意味。
\`
バッファの先頭
\'
バッファの最後
\w
単語
\W
単語以外
\b
単語の先頭、または、単語の末尾
\B
「単語の先頭および単語の末尾」以外
バッファとは、Emacs でメ モリを抽象化したもの。ファイルの内容を読み込み、編集できる。保存しない と失われる。

■検索と置換え

◆Emacs の検索

通常(一括) インクリメンタル
正規表現なし search-forward isearch-forward
正規表現付き search-forward-regexp isearch-forward-regexp
方向は、-forward 以外に -backward がある。
C-r             isearch-backward
C-s             isearch-forward
C-M-r           isearch-backward-regexp
C-M-s           isearch-forward-regexp
C-M-s は、Esc C-s, C-M-r は、Esc C-r と同じ。

◆Emacs の置換え

一括 問合せ付き
正規表現なし replace-string query-replace
正規表現付き replace-regexp query-replace-regexp
M-%             query-replace
C-M-%           query-replace-regexp

◆コマンドラインでの検索

The Unix Super Text 33.1.3節 参照
grep
正規表現での検索。
egrep
正規表現での検索。+,?,|,() が使える。
fgrep
文字列での検索。正規表現は使えない。
sed
正規表現での検索(pコマンド)。
awk
正規表現での検索(printコマンド)。+,?,|,() が使える。

◆コマンドラインでの置換え

sed
正規表現での検索と、マッチした部分の参照。
awk で、正規表現で行を検索した後、printf()substr() による非正規表現で の置換えができる。

◆find コマンド

Unix の find コマンドは、ディレクトリ木をたどりながらファイルを検索する ことができる。 The Unix Super Text 33.1.5項 参照

注意点

◆メタキャラクタの衝突

シェルに対するコマンドで正規表現を打つときには、メタキャラクタの衝突に 気をつける。 正規表現で使うメタキャラクタシェルのメタキャラクタが重なっている。 シェルが正規表現の「$」や「*」を解釈しないように、 シングルクォート「''」でくくるなどして、エスケープする。

■Webページに対するアクセス制御と認証

ファイルに対するアクセス制御と 考え方が共通の部分と異なる部分がある。

◆アクセス制御

[再掲]

アクセス制御(access control) とは、「主体」が、「オブジェクト」を「操作」する時、どんな操作なら正し いということを定義して、それがきちんと守られていることをということを保 証することである。

図? アクセス制御における主体、オブジェクト、および、操作

図? アクセス制御における主体、オブジェクト、および、操作

◆Webページにのアクセスにおける主体、オブジェクト、操作

WWWは、もともと大勢の人にメッセージを伝えるための仕組みだが、後付けでア クセス制御の仕組みを入れた。 あるページは、ある特定の人(同じ研究室・部署の人)だけにしか見えないよ うに設定することもできる。

主体
オブジェクト
URLで表現できるもの。木構造を利用した指定や正規表現による指定も可能。
操作

◆Webページに対するアクセス制御の設定

アクセス制御の設定は、普通は、オブジェクト側でなされる。 access.conf は空で、全部 httpd.conf に書くことも多い。 サーバの管理者は、.htaccess を無効にもできる。

coins では、orchid-nwd の次の場所にある。

◆IPアドレスやドメイン名によるアクセス制御

httpd.conf や .htaccess に次のように記述する。
order deny,allow
deny from all
allow from 130.158.0.0/16 133.51.0.0/16 192.50.17.0/24
主体は、IP アドレスで指定されたクライアント・コンピュータ。

◆WWW Basic認証

WWW ブラウザが1つのページをアクセスするたびに HTTP のヘッダにユーザ名 とパスワードを含める。

GET /dir1/file1.html HTTP/1.1[←]
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==[←]
[←]
Authorization: には、ユーザが打ち込んだユーザ名とパスワードが Base64 (64進数)で符合化されて含まれている。Base64 は、暗号ではないので、 簡単に元にもどせる。

% echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | openssl base64 -d [←]
Aladdin:open sesame% [←]
% []
Basic 認証では、パスワードがそのままネットワークを流れてしまう。 この問題点を解消するために、SSL で通信路を暗号化することがよく行われる。

◆WWW Basic認証の設定

ユーザ名とパスワードの対応を保存する方法にはいくつかの方法がある。

◆ファイル名のマッチング

.htaccessでは、アクセス制御の対象を、特定のファイル名のパタン(正規表現)を 持つものだけに限定することができる。 以下の例では、拡張子として .gif, .jpeg, .jpg, .png 等を持つファイルを対 象として、deny, allow を適用している。
<FilesMatch "\.(gif|jpe?g|png)$">
    order deny,allow
    deny from all
    allow from 130.158.0.0/16 133.51.0.0/16 192.50.17.0/24
</FilesMatch>

■cookie

cookieは、コンピュータ・サイエンス(情報学類)の専門用語。

協調して動作しているプログラムの間で、ある一連の作業を識別するための数 を意味する。

WWW(World Wide Web)では、1回のデータ転送ごとに通信路が切断される ので、通常はWWWのブラウザ(クライアント)とWWWサーバの間では、途 中経過を保持することができない。

途中経過を保存したい時:

WWWで途中経過を保存するためには、cookie が使われる。

サーバは、その情報を利用して、適切なページ(たとえば前回最後に訪れたペー ジ)を表示させるようにすることができる。

◆cookieとプライバシ

現在の cookie の実現では、利用者のプライバシーを犯す危険性が高いという 問題が指摘されている。

普通のWWWサーバでは、要求を送ってきたコンピュータのIPアドレスを記 録しているので、コンピュータ単位でのアクセス状況を記録することはできる が、個人を特定することはできない。

クッキーを利用することにより、コンピュータではなくどの個人がアクセスし てきたかを記録することができる。

クッキーから電子メールのアドレスや氏名まで調べることはできない。 しかし、インターネットをサーフしている間にどこかでそれを打ち込んだが最 後、クッキーと電子メール・アドレスや氏名との対応が記録されてしまう危険 性がある。

参考

RFC2965 HTTP State Management Mechanism
Netscape社によるWWWにおけるクッキー実現の案
http://wp.netscape.com/newsref/std/cookie_spec.html

■授業アンケート

■実習

実習時間中には、 以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(2001) grepコマンド

grep コマンドの正規表現検索機能を使って、次のファイルや結果を検索しなさ い。 grep コマンドの正規表現検索機能を使って、次のコマンドの実行結果結果を検 索しなさい。

★練習問題(2002) egrep

grep の代わりに egrep を使ってみなさい。egrep 独自の機能を調べなさい。

★練習問題(2003) sed

The Unix Super Text 35.3 参照。 sed コマンドを使って、正規表現の検索を行いなさい。 sed コマンドを使って、正規表現の置換えを行いなさい。

★練習問題(2004) awk

awk コマンドを使って、正規表現の検索を行いなさい。

★練習問題(2005) 1行プログラミング

Ruby, Perl などのスクリプト言語が持つ1行プログラミングの機能を用いて、 正規表現の検索を行いなさい。
% ruby -n -e 'print if /正規表現/' [←]

★練習問題(2006) lookコマンド

look コマンドは、単語のスペルを調べるコマンドである。grep コマンドを用 いて、look コマンドと同じ単語が検索できることを確認しなさい。
% cd /usr/share/dict [←]
% grep '^pattern' words [←]
% look pattern [←]

★練習問題(2007) WWW ブラウザの cookie の状態

WWW ブラウザが、cookie をどのように扱う状態になっているかを調べなさい。 cookie を受け付けないように設定してみなさい。

MacOSX Firefox

次のような操作を行ってみなさい。

★練習問題(2008) ファイルに保存されたCookieの観察

cd, ls, lv コマンドなどを利用して Cookie が保存されているファイルを観察 しなさい。MacOSX Firefox では次の場所にある。

★練習問題(2009) .htaccessによるBasic認証のページ(coinsのパスワード)

~/secure_html/ の下に、実験用のディレクトリを作成しなさい。
% mkdir ~/secure_html [←]
% mkdir ~/secure_html/ディレクトリ名 [←]
次のドキュメントを参考にして、作成したディレクトリに .htaccess を作成し なさい。 次の3つの方法を比較しなさい。 レポート提出ページや出席ボタンでは、どのような設定になっているかを観察しなさい。

★練習問題(2010) .htaccessによるBasic認証のページ(htpasswd)

htpasswd コマンドを使ってパスワード・ファイルを作成しなさい。作成したパ スワード・ファイルを利用して、Basic 認証によりアクセス制御を行うように 設定しなさい。 The Unix Super Text 28.7.6項 参照

例:パスワード・ファイル /home1/prof/yas/etc/passwd-doc1 に登録されているユーザだけが、 .htaccess があるディレクトリ以下にあるファイルをアクセスできる。

.htaccess:

AuthType Basic
AuthName "restricted stuff"
AuthUserFile /home1/prof/yas/etc/passwd-doc1
require valid-user
このパスワード・ファイルは、サーバ上でhtpasswd というプログラムで作成する。
% htpasswd -c /home1/prof/yas/etc/passwd-doc1 user1 [←]
Adding password for user1.
New password:user1のパスワードを打ち込む[←]
Re-type new password:user1のパスワードを打ち込む[←]
% htpasswd /home1/prof/yas/etc/passwd-doc1 user2 [←]
Adding user user2
New password:user2のパスワードを打ち込む[←]
Re-type new password:user2のパスワードを打ち込む[←]
% []
一番最初は、-c オプション付で実行する。passwd コマ ンドと同様に、打ち込んだパスワードは、画面には表示されず、また、確 認のために2回打つ必要がある。

htpasswd コマンドの結果、次のようなファイルが作られる。

user1:1fjr1tHIgoG7U
user2:qXaeA9Zge7Yqc
ユーザ名と暗号化されたパスワード(正確にはパスワードのハッシュ値)から 構成される。

パスワードによるアクセス制御の例: 設定ファイル .htaccess

AuthType Basic
AuthName "restricted stuff"
AuthUserFile /home1/prof/yas/etc/passwd-doc1
require valid-user

★練習問題(2011) .htaccessによるBasic認証のページ(dbmmanage)

htpasswd コマンドの代わりに dbmmanage コマンドを使い、パスワード・ファ イルを作成しなさい。作成したパスワード・ファイルを利用して、Basic 認証 によりアクセス制御を行うように設定しなさい。

★練習問題(2012) WWWページに対するIPアドレスによるアクセス制御

特定のIPアドレスのコンピュータからしか表示できないような WWW ページを作 成しなさい。逆に、特定のIPアドレスのコンピュータからは表示できないよう な WWW ページを作成しなさい。

★練習問題(2013) 正規表現によるアクセス制御

Apache には、正規表現によりアクセス制御の対象となるファイル名や URL を 指定する機能がある。この機能を確認しなさい。

★練習問題(2014) レポート提出ページの.htaccess

レポート提出で用いている report.cgi プログラム は、次の場所にある。
% ls ~yas/secure_html/coins/literacy-2008/ [←]
% ls -a ~yas/secure_html/coins/literacy-2008/ [←]
ここにある .htaccess にどのような記述がなされているかを調べなさい。

◆課題20 正規表現、Webページに対するアクセス制御

締め切りは、2008年7月1日火曜日とする。 回答をテキスト・ファイルに記述し、(レポート提出 ページ)から提出しなさい。

(1) 正規表現の検索機能を用いて、次のファイルから次のことがらを検索して 画面に表示しなさい。

レポートには、コマンドラインと実行結果を含めなさい。実行結果が10行以上 に渡る時には、途中を省略しなさい。アクセス・ログに時分のページへのアク セスがない場合には、Web ブラウザでアクセスしなさい。

なお、grepコマンドには、or の機能がない。orが必要な場合、grep コマンド を複数回実行してもよい。egrep 機能を用いれば 1 回で終わることもある。

(2) 正規表現の検索機能を用いて、次のコマンドの実行結果から次のことがら を検索して画面に表示しなさい。

(3) 正規表現の置換え機能(sed,Emacs,viなど)を用いて、次のことを行いなさい。

レポートには、利用したプログラムの種別、そのプログラムに与えた命令を書 きなさい。

(4) アクセスする時に Cookie の設定を要求する Web サイトを1つ示しなさい。 そのサイトが Cookie の設定を有効にした時と無効にした時で動作が変わるか を調べなさい。

(5) [加点] Webページにおいて、ある特定のディレクトリ以下のファイルやディ レクトリに対して、Basic 認証、または、IP アドレスを用いてアクセス制御を 行うように設定しなさい。レポートにはディレクトリ名、および、作成し た.htaccess の記述、アクセスが許されたときのログ、失敗した時のログを含 めなさい。ログは最小限のものだけを含めなさい。


Last updated: 2008/07/01 15:31:51
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>