|
>>1767 68userさん おはようございます。 > おー、これってきっちりやると結構面倒かも。 こんなに奥が深いものとは想像もつきませんでした。以前これに着手しかけて断念した覚えはあったのですが,なぜ断念したかは覚えていません。 > 無限ループが恐いので (^^;、まだ wwwboard.cgi には組み込んでません。 早速ruby文に変換して実働掲示板に使っています。無限ループになっても利用者が二人しかいないサーバだし,HTTPならすぐ切れそうだということで,心配はしていません。 そんなわけで,いつもありがとうございます。これからもお世話になります。 |
|
こんなのも。 $_='hoge<http://x68000.startshop.co.jp/~68user/><http://www2s.biglobe.ne.jp/~cru/library/>fuga'; $http_pattern = '((http|https)://[a-zA-Z0-9\.\/\~\:\?\#\@\&\-\+\=;%_]+)'; s/&/&/g; s/\"/"/g; s/</</g; s/>/>/g; @items = split(/(<|>|")/, $_); foreach (@items){ s|$http_pattern|<A HREF="$1">$1</A>|g; } $_ = join('', @items); print "$_\n"; アルゴリズム・正規表現が複雑にならないという点で、これが 一番よさげかなぁ。でも動作チェックと速度計測をしなくては。 もっとよいのを思いついた方は教えてください。 |
|
>>1770 68user commit しました。とか言ってみたり。 http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/cgi-bin/wwwboard.cgi |
|
>>1770 68userさん いいですねぇ。 これ頂きます。perl4でも動くし(^^; |
|
質問したいことがあります。それはあるプログラムでPIDを変数として 持っているときに、その変数のPIDのプロセスを殺す方法があれば教えて欲しいのですが。 よろしくお願いします |
|
>>1773 purine 必ず OS 名や使用している言語を書いてください。 kill コマンドか、システムコール kill を使います。 http://X68000.startshop.co.jp/~68user/unix/pickup?keyword=kill&target=command&partial=on |
|
japu さん (http://www.japu.org/) より、source.cgi に関して CGI Security Advisoriy をいただきました。 これは他サイトに HTTP でアクセスし、GET した結果を表示 するもので、 「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/ からは <!-- --> でコメントアウトしてあったものです (なぜコメントアウトしたかは忘れた)。 # また、昔利用していた http proxy 経由でアクセスするため、 # X68000.startshop.co.jp からは正しく動作しませんでした。 しかし、トップページからはスクリプトのソースを見ることができ、 source.cgi 自体も実行可能なままになっていました。これに対して http://X68000.startshop.co.jp/~68user/Cgi-room/source.cgi?url=http://www.yahoo.co.jp';ls%20*' といったアタックが可能でした。これは open(IN,"$httptalker -get '$url'|"); の部分で open(IN,"$httptalker -get 'http://www.yahoo.co.jp';ls *''|"); と解釈されます。open の引数に ; ? * | などを渡すと、perl は /bin/sh を起動し、/bin/sh がコマンドを実行しますので、任意の コマンドが実行可能です。 で、SA を受けて open(IN, "-|") or exec($httptalker, '-get', $url); と修正しました。この場合は perl が直接 fopen(3) を呼ぶため、' ; * など が特別扱いされることなく、$httptalker の引数にそのまま渡ります。 source.cgi の更新履歴: http://X68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/Cgi-room/source.cgi セキュリティホールを指摘して下さった japu さんに感謝いたします。 んで、 「CGI の小部屋」http://X68000.startshop.co.jp/~68user/Cgi-room/ ですが、もうメンテする気力がないし、技術的な興味もないし (nslookup とか whois コマンド呼ぶだけのスクリプト見てもおもしろくないでしょ)、例えば ドメイン名検索とかならもっと便利なサイトがあるので、この掲示板で誰からも 反応がなければ近日中に消すつもりです。 |
|
>>1775 68user > open(IN, "-|") or exec($httptalker, '-get', $url); > と修正しました。この場合は perl が直接 fopen(3) を呼ぶため 訂正。perl が直接 pipe(2)、fork(2)、exec(2) するため、でした。 |