link もっと前
   2018年 6月 28日 -
      2018年 6月 28日  
link もっと後

link 未来から過去へ表示(*)
link 過去から未来へ表示

日々

link permalink

Namazu 延命

Namazu の延命策として、検索文字列に UTF-8 文字列を投げられるようにしました。

といっても、オリジナルの CGI を namazu.cgi → namazu2.cgi にリネームして、下記のラッパー CGI を用意しただけです。

Sakura は Perl が 2種類(/usr/bin/perl = perl 5.8, /usr/bin/perl5 = perl 5.14)入っていて、perl 5.14 だけ Text::Iconv がインストールされています。しかしなぜか @INC にパスが通っていません。仕方ないので、かなりダサいですが、強引にパスを通しています。

UTF-8 の検索文字列を EUC-JP に変換するラッパー

#!/usr/bin/perl5

use lib '/usr/local/lib/perl5/site_perl/5.14/mach';

use CGI;
use Text::Iconv;

my $cv = Text::Iconv->new("UTF-8", "EUC-JP");
my $cgi = CGI->new;
my $q_cv = $cv->convert(scalar $cgi->param('query'));
$cgi->param('query', $q_cv);
$q_str = $cgi->query_string();
print "Location: namazu2.cgi?" . $q_str . "\n\n";

今回スクリプトを書いていて初めて知ったのですが CGI の param 関数を読んでスカラ値を受けたい場合 scalar $cgi->param('query') という書き方をした方が良いそうです。

理由の詳細はこのブログ(New Class of Vulnerability in Perl Web Applications)に載っていますが、ハッシュで受けると意図せず他の値を上書きしてしまう可能性があるので、明示的にスカラとして受け取るべき、ということらしいです。

気づいたきっかけ

Perl 初心者の私がなぜ気づいたかというと、動作テストをしたときに Apache の動作ログに、下記の Warning が記録されたからです。

Apache のエラーログ
AH01215: CGI::param called in list context from /home/katsuhiro/public_html/namazu/aaa.cgi line 8, this can lead to vulnerabilities.
See the warning in "Fetching the value or values of a single named parameter" at /usr/share/perl5/CGI.pm line 412.

初心者にはエラーメッセージだけだと意味がわかりませんが、Warning メッセージに言われるがまま /usr/share/perl5/CGI.pm 412行目を見ると、

CGI.pm

	# list context can be dangerous so warn:
	# http://blog.gerv.net/2014.10/new-class-of-vulnerability-in-perl-web-applications
	if ( wantarray && $LIST_CONTEXT_WARN == 1 ) {
		my ( $package, $filename, $line ) = caller;
		if ( $package ne 'CGI' ) {
			$LIST_CONTEXT_WARN++; # only warn once
			warn "CGI::param called in list context from $filename line $line, this can lead to vulnerabilities. "
				. 'See the warning in "Fetching the value or values of a single named parameter"';
		}
	}

危険な理由として、先ほど紹介したブログの URL を書いてくれていました。親切ですね。ブログを読んだので何となくわかりましたが、説明なしでは若干難解なコードかもしれません…。

[編集者: すずき]
[更新: 2018年 6月 29日 00:12]
link 編集する

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2018年 6月 28日 -
      2018年 6月 28日  
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 7/17 22:53

カレンダー

<2018>
<<<06>>>
-----12
3456789
10111213141516
17181920212223
24252627282930

最近のコメント 5件

  • link 18年07月04日
    すずき 「NEON にも対応してみましたが、やはり...」
    (更新:07/11 21:26)
  • link 18年05月30日
    すずき 「情報ありがとうございます。PT2 2枚差...」
    (更新:06/02 17:27)
  • link 18年05月30日
    通りすがりですみませ... 「私のPC(Win10)ではB−CAS1枚...」
    (更新:06/02 16:42)
  • link 18年05月20日
    すずき 「数えたことはありませんが Windows...」
    (更新:05/22 22:26)
  • link 18年05月20日
    hdk 「Linux も、先日の Meltdown...」
    (更新:05/21 22:55)

最近の記事 3件

link もっとみる
  • link 18年07月17日
    すずき 「[エアコンが臭い] 「エアコンの嫌なニオイが完全に消えた」 "窓全...」
    (更新:07/17 22:53)
  • link 18年07月16日
    すずき 「[AArch64 向け Linux 開発環境の構築 その 2] そ...」
    (更新:07/17 22:46)
  • link 18年07月07日
    すずき 「[Android と MPEG2-TS その 3] その 1、その...」
    (更新:07/17 22:46)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報