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/
情報科学類として、楽するとは、人間の仕事をなるべくコンピュータにやらせること。
宿題や試験の考え方
試験について
^a.*tion$
」。「aで始まり、tionで終わるもの」。
「^
」、「.
」、「*
」、「$
」 は、
メタキャラクタ。特別の意味を持つ。
メタキャラクタを含まない文字列も、正規表現として意味を持つ。
*,?,[]
」などは、単にワイルドカードではなく、正規表現に
近い。複数の場所に「*
」が書けるので、単なるワイルドカードではな
い。
grep使われている正規表現
\
^
[]
の中で使われたときには否定の意味)
$
.
[c1c2c...cn]
c1c2c...cn
のどれか。
例:[abc]
ならa
かb
かc
のどれか。
[c1-c2]
c1
からc2
の範囲のどれか。
例:[a-z]
ならa
からz
までのアルファベットの小文字。
[^c1c2c...cn]
[^abc]
ならa
でもなくb
でもなくc
でもないもの。
*
.*
なら任意の文字の任意回数の繰り返し。
[a-z]*
ならアルファベット小文字の任意回数の繰り返し。
ab
なら、「a
」に続き「b
」。
\(正規表現\)
X\(abc\)*X
は、XabcabcX
にマッチする。
\N
X\(abc\)\1X
は、XabcabcX
にマッチする。
\<
\>
正規表現 | マッチする例 | マッチしない例 |
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 |
正規表現+
正規表現
の1回以上の繰り返し。「正規表現 正規表現*
」と同じ。
正規表現?
正規表現
が0回、または、1回。
正規表現1|正規表現2
正規表現1かまたは正規表現2
。orの意味。
(正規表現)
正規表現
のグループ化。
\(\)
やその参照\N
は廃止された。
|
の意味が違い、egrepで
|
と書く所、Emacs では
\|
と書く。egrep で
\|
と書く所では、Emacs では|
でよい。
正規表現1\|正規表現2
正規表現1かまたは正規表現2
。orの意味。
\`
\'
\w
\W
\b
\B
通常(一括) | インクリメンタル | |
正規表現なし | 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
と同じ。
一括 | 問合せ付き | |
正規表現なし | replace-string | query-replace |
正規表現付き | replace-regexp | query-replace-regexp |
M-% query-replace
C-M-% query-replace-regexp
+
,?
,|
,()
が使える。
+
,?
,|
,()
が使える。。
printf()
や substr()
による非正規表現で
の置換えができる。
注意点
$
」や「*
」を解釈しないように、
シングルクォート「''
」でくくるなどして、エスケープする。
[再掲]
アクセス制御(access control)
とは、「主体」が、「オブジェクト」を「操作」する時、どんな操作なら正し
いということを定義して、それがきちんと守られていることをということを保
証することである。
図? アクセス制御における主体、オブジェクト、および、操作
httpd.conf
(access.conf)
.htaccess
coins では、orchid-nwd の次の場所にある。
/opt/apache2/conf/httpd.conf
/sw/etc/apache2/httpd.conf
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 ブラウザが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 で通信路を暗号化することがよく行われる。
<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>
協調して動作しているプログラムの間で、ある一連の作業を識別するための数 を意味する。
WWW(World Wide Web)では、1回のデータ転送ごとに通信路が切断される ので、通常はWWWのブラウザ(クライアント)とWWWサーバの間では、途 中経過を保持することができない。
途中経過を保存したい時:
WWWで途中経過を保存するためには、cookie が使われる。
普通のWWWサーバでは、要求を送ってきたコンピュータのIPアドレスを記 録しているので、コンピュータ単位でのアクセス状況を記録することはできる が、個人を特定することはできない。
クッキーを利用することにより、コンピュータではなくどの個人がアクセスし てきたかを記録することができる。
クッキーから電子メールのアドレスや氏名まで調べることはできない。 しかし、インターネットをサーフしている間にどこかでそれを打ち込んだが最 後、クッキーと電子メール・アドレスや氏名との対応が記録されてしまう危険 性がある。
参考
RFC2965 HTTP State Management Mechanism
Netscape社によるWWWにおけるクッキー実現の案
http://wp.netscape.com/newsref/std/cookie_spec.html
% ruby -n -e 'print if /正規表現/'
% cd /usr/share/dict
% grep '^pattern' words
% look pattern
MacOSX Firefox
~/Library/Application\ Support/Firefox/Profiles/*/cookies.txt
% mkdir ~/secure_html
% mkdir ~/secure_html/ディレクトリ名
次のドキュメントを参考にして、作成したディレクトリに .htaccess を作成し
なさい。
次の3つの方法を比較しなさい。
Require group
と書く方法
Require user
と書く方法
Require valid-user
と書く方法
例:パスワード・ファイル
/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
% ls ~yas/secure_html/coins/literacy-2008/
% ls -a ~yas/secure_html/coins/literacy-2008/
ここにある .htaccess にどのような記述がなされているかを調べなさい。
(1) 正規表現の検索機能を用いて、次のファイルから次のことがらを検索して 画面に表示しなさい。
/var/log/httpd/www.coins80/access_log.200806240524
または
同じディレクトリ内にあるアクセスログ。自分が作成したWWWページのうち、
HTMLファイルのみ。(ssh で orchid-nwd にログインして行う。)
なお、grepコマンドには、or の機能がない。orが必要な場合、grep コマンド を複数回実行してもよい。egrep 機能を用いれば 1 回で終わることもある。
(2) 正規表現の検索機能を用いて、次のコマンドの実行結果から次のことがら を検索して画面に表示しなさい。
(3) 正規表現の置換え機能(sed,Emacs,viなど)を用いて、次のことを行いなさい。
1: #include <stdio.h> 2: 3: #define NAME "(name)" 4: 5: int main() 6: { 7: printf("Hello, %s\n", NAME ); 8: }
(4) アクセスする時に Cookie の設定を要求する Web サイトを1つ示しなさい。 そのサイトが Cookie の設定を有効にした時と無効にした時で動作が変わるか を調べなさい。
(5) [加点] Webページにおいて、ある特定のディレクトリ以下のファイルやディ レクトリに対して、Basic 認証、または、IP アドレスを用いてアクセス制御を 行うように設定しなさい。レポートにはディレクトリ名、および、作成し た.htaccess の記述、アクセスが許されたときのログ、失敗した時のログを含 めなさい。ログは最小限のものだけを含めなさい。