AN HTTPD ゲストブック/コメント集(1999年11月9日09:57)


あんな tamatoku@messages.to 1999/11/24 04:47

どうも、あんなです。
V1.22bにて、存在しないindex.htmlをGETしようとしたときのエラーがが403から404になったのと、
REPORT_PORTの取得が可能になったことを確認しました。

対応していただき、どうもありがとうございました。


中田昭雄 nakata@st.rim.or.jp 1999/11/11 21:18

あんなさん、
使い方はともかく REMOTE_PORT は使えるようにするつもりです。


あんな tamatoku@messages.to 1999/11/11 02:09

>中田さん

実のところ私もクライアントのポート番号の仕組みとか法則とか、よくわからずにあのソースをいじっています。
一応、あのBBSスクリプト内でそういう処理があって、多分クライアントの簡易識別みたいなものだと解釈してます。

実際のところ、
1.2つブラウザを起動する。
2.同じBBSに入る。
3.ブラウザごとにそれぞれ違う暗証番号が発行される。例えば、123と4567といった具合。
 そして、、接続元のポート番号が前者が23456、後者が23459となっていた(と仮定する)。
4.この場合、123の番号が発行されたブラウザ側に4567を入力しても通らず、その逆も同様となる。

という仕掛けではないかと思います。
私も原作者の方にここのところを伺ったわけではないので詳しくはわからないのです。申し訳ないです。
この仕掛けがセキュリティ的にどのような強度を持つのかは私にはどうとも言えないのですけど、
一応REMOTE_PORTが取得できて規格通りに動作できればいいなあ、ということで要望させていただきました。

>REMOTE_PORT はクライアントの識別には使えないような気がします。
>HTTP/1.1 でもサーバが Connection: close を返せば1リクエスト毎に1 TCPコネクションになり、クライアントのポートは コネクション毎に変わるでしょうから。

情報によると、掲示板自動書き込みソフトは今のところ(特別なプロキシを通さない限り)
Keep-Aliveしてこないようなので参考にはなります。
ただ、よく勘違いしている方がおられるようですけど、言うまでもなくこの環境変数(HTTPヘッダ)は
不正アクセスを識別する目的のものではないので、Keep-Aliveしてこないクライアントを
安易に差別扱いはできないです。もちろん十分参考にはなりますけど。


>ぴゅあさん

> 同一のIPアドレスで同一人物は同一,別の人物は別人と識別する手が他に何があるのだろう。。。。

同一のIPアドレスの別人といえばやはり学内からなどのプロキシアクセスでしょうけど、
これを区別するにはプロキシ環境変数かクッキーでしょう。
ちなみに私の方では、上記のポート番号云々とは別の方法で識別しています。
クライアントポート番号の仕組みがよくわからないものですから・・・。というか使えなさそうでなので。


ぴゅあ pure@GalaxyCorp.com 1999/11/10 22:15

 追記
 以前1つのページのアクセスに対して多くのポートが同時に使われていたことを確認できてい
たことは確かにあります。
 同一のIPアドレスで同一人物は同一,別の人物は別人と識別する手が他に何があるのだろう。。。。
 学内LANでも単にIPアドレスが違うというだけのことなのかな。
 これは扱ったことが無いので詳しくは。。。。


ぴゅあ pure@GalaxyCorp.com 1999/11/10 22:08

>中田さん
 ん〜 そうなのでしょうか。。。。
 まあ実際にそのソースを見たことは無いのでどのように識別しているのか判らないのですがそ
れくらいしか思い当たるものがなかったので。。。。
 遠い先に実験するつもりではあるのでそのうち。


中田昭雄 nakata@st.rim.or.jp 1999/11/10 21:22

ぴゅあさん、
REMOTE_PORT はクライアントの識別には使えないような気がします。
HTTP/1.1 でもサーバが Connection: close を返せば1リクエスト毎に1 TCPコネクションになり、クライアントのポートは コネクション毎に変わるでしょうから。
プロクシ経由の場合はもちろんプロクシサーバの(クライアント)ポートしかわかりません。

クライアント側で使用しているポート番号は、クライアント上で netstat でわかります。


ぴゅあ pure@GalaxyCorp.com 1999/11/10 08:06

 ずっと以前にお願いしたこともあるのですがちょっと浮上しつつあるので少し。

 REMOTE_PORTはブラウザ(だけでない。要するにクライアント)が出している(らしい)もの
でIPアドレス,ポート(80とかの)はサーバを呼びますけどサーバからクライアントを呼ぶ
ときはではこれだけでは識別しきれないからリモートポートが更に追加されるのだと勝手に解釈
しています。
 簡単には大学等のLAN内から接続しているときでしょう。このときIPアドレスは同一になるの
でクライアントを識別できない筈です。そこでリモートポートで更に細かく識別しているものと
思われます(実際のブラウザでの動作は更に複雑らしい)。
 実際それを利用した2重ログインを禁止したCGIも存在したりします。
 IPアドレスだけで2重ログインを禁止していると誰かがログインすると他の人はログインでき
ないか誤動作するはずです。
 IEとネスケを併用した場合そうして作られたCGIを見る限り同じリモートポートが使われるら
しいので更にエージェントで分類されると考えられます。エージェントを考慮しないと誤動作す
る場合もあるようです。

 ってなことで。
 ちっと雑談。


中田昭雄 nakata@st.rim.or.jp 1999/11/09 21:41

あんなさん、
たしかに、明示的にindex.htmlを指定した場合は 404 ですね。
REMOTE_PORT はもともとクライアントが出すポート番号ですから問題はないのだろうと思います。
というわけで、両方とも次回以降のバージョンで対応します。


あんな tamatoku@messages.to 1999/11/09 09:57

どうもはじめまして。あんなと申します。
ANHTTPdはPerl-CGIスクリプトのローカルでの開発に使わせて頂いております。

ところで少し気になることがありました。

・"index.html"が存在せず、リストが出せないディレクトリに対して"index.html"を
要求すると403エラーが返ってきますけど
(例えば、http://127.0.0.1/cgi-bin/index.html)、
そもそも"index.html"は存在しないので404(not found)の方がいいのではないでしょうか。

・今、Force 264(http://carl.blackout.org/)というサイトで公開されているイタズラ
防止BBSスクリプトをさらに改造して、広告自動書き込みソフトへの対策を盛り込んで
いるのですけど、そのスクリプトの「画像式チェックコード」という強力なセキュリティ機能を使うときに、
「$ENV{'REMOTE_PORT'}」を取得する処理があって、これを取得するとクライアントごとに
ユニークな番号が得られるのでそれを使ってクライアントの区別をしているようです。
この変数はApacheでは取得できるのですけど、もしセキュリティ上の問題がなければ
クライアントのポート番号を$ENV{'REMOTE_PORT'}で取得できるようにして頂けないでしょうか。
 ちなみにそのBBSスクリプトは$ENV{'REMOTE_PORT'}が取得できなくても一応動作はするようです。

以上、よろしくお願い致します。