インターネット

Requirements for Mobile Phones (English)

I would like to propose the unique requirements for mobile phones. The following items are significant considerations under mobile site development, especially in i-mode phones.

  1. UserAgent type that is, a Browser Name of CGI environments which is sent by a mobile phone to a web server.
  2. Range of IP addresses in each mobile operator, which is required to judge whether a user is using a mobile phone or a PC in order to support both of them in the web site. In Japanese mobile phone operators, they are using their specific proxy servers, which are accompanying with the specific range of IP addresses.
  3. Screen Size of each mobile phone, especially the size of width, which would be found in a CGI environment UserAgent in the latest phones
  4. Image Format such as JPEG, PNG and GIF supported by each mobile phone
  5. Maximum Size of Receiving Bytes per a page
  6. Difference of Handling Colors in each mobile phone
  7. Difference of Smilies (Picture Icons) both in each mobile phone and operator
  8. Name Convention of an E-mail Address in each operator (Japanese i-mode e-mail system violates RFC).
  9. Available Character Set in each operator (Shift-JIS, UTF-8 in Japan)
  10. Available Character Types in each operator (such as ZENKAKU, HANKAKU in Japan)
  11. Available Input Method in each operator (Access-key concept in CHTML)
  12. Support of Native Functions of a mobile phone (i.e. switching a browser screen to an e-mail application with 'mailto:' in CHTML at a single screen of a mobile phone, launching Java application, and directly calling to someone with 'tel:' in CHTML, etc)
  13. Difference in between Official Sites and Unofficial Sites (The acquiring information is different)
  14. Session Management because we cannot use cookie in i-mode phones
続きを読む

Linux で、postfix を使ってイントラネットからメールを送信する方法

Fedora Core 6 の場合、デフォルトの MTA (Mail Transfer Agent) は sendmail となっている。で、実験用 Linux サーバをイントラネットに置いてメールを出そうとしたら、Connection Refused というエラーメールが返ってきてしまった。どうもイントラネットから外へのポート 25 がふさがっているから外部のホストにつながらないらしい。

そこで sendmail の設定をいろいろと調べてはみたものの、やっぱり sendmail.mc とか sendmail.cf は呪いたくなります。結局挫折。今までの人生の中で何度か sendmail を設定する機会があったが、いずれもよくわからなかった。

続きを読む

Perl で、BASIC 認証(基本認証)付きのサイトにアクセスするには?

LWP::UserAgent を使うのだが、以下のコードで太字の行がポイント。

使用するモジュール

use LWP::UserAgent;

コード

#!/usr/bin/perl use LWP::UserAgent; our $HOME_URL = 'ユーザー名とパスワード付きの URL'; our $USERNAME = '上記 URL にアクセスするためのユーザー名'; our $PASSWORD = '上記 URL にアクセスするためのパスワード'; $ua = LWP::UserAgent->new; $req = HTTP::Request->new(GET => $HOME_URL); $req->authorization_basic($USERNAME, $PASSWORD); print $ua->request($req)->as_string; 1;
続きを読む

ウェブサイト構築時のセキュリティのポイント

IPA(独立行政法人情報処理推進機構)の「安全なウェブサイトの作り方」というドキュメントは、なかなかまとまっていて、良い。すべてのウェブアプリ開発者は目を通しておくべきだ。ここではこのドキュメントから注意点をピックアップしてまとめてみた。

  1. SQL インジェクション
  2. OS コマンド・インジェクション
  3. パス名パラメータの未チェック/ディレクトリ・トラバーサル
  4. セッション・ハイジャック
  5. クロスサイト・スクリプティング
  6. クロスサイト・リクエスト・フォージェリ (CSRF)
  7. HTTP ヘッダ・インジェクション
  8. メールの第三者中継

続きを読む

Perl で、JavaScript と連動してサーバにアクセスログを残す方法

ウェブページへのアクセスログを記録する方法は、いろいろな方法があると思う。もっとも簡単なのは Apache などのウェブサーバが自動的に記録するログをチェックすることで、これには何の手間もいらない。しかし、レンタルサーバなどでログが自由に扱えない場合はどうしたらいいのだろう?

そのひとつが、画像としてリンクされている Perl などの CGI を呼び出す方法だ。利用者に知られずこっそりとアクセスログを取るには 1x1 ピクセルの画像をそのウェブページの背景と共に表示してしまえば、そのウェブページのソースをチェックされない限り、ほとんどの場合は気づかれずにすむだろう。

そんなわけで、以下のように JavaScript と対応する Perl スクリプトで、アクセスログを記録する仕組みを作ってみた。ログの形式は Apache に準拠する(たぶん)。

続きを読む

Perl で、RADIUS クライアントを作る。

Radius サーバに接続するためには、そのホスト名とシークレットが必要である。シークレットは Radius サーバへのパスワードみたいなもの。以下のコードでは $r に Radius クライアントのオブジェクトが入り、その後で $USENAME と $PASSWORD を使って $HOST にアクセスしている。

使用するモジュール use Authen::Radius; #!/usr/bin/perl use Authen::Radius; our $HOST = '1.1.1.1'; our $USERNAME = 'perltips'; our $PASSWORD = 'password'; our $SECRET = 'testing123'; # First Trial $r = new Authen::Radius(Host => $HOST,
                    Secret => $SECRET,
                    Debug  => 1,
                    TimeOut=> 10);
# 前座。ユーザー名とパスワードのチェックをしてみる。 print "auth result=", $r->check_pwd($USERNAME,
                                $PASSWORD,
                                $HOST), "\n";
# Authen::Radius->load_dictionary(); # 本番。ユーザー名とパスワードのチェックを設定する。 $r->add_attributes (
            { Name => 'UserName',       Value => $USERNAME },
            { Name => 'Password',       Value => $PASSWORD },
# { Name => 'NAS-IP-Address', Value => '1.1.1.2' } # # RFC 2865 http://www.ietf.org/rfc/rfc2865.txt calls this attribute # User-Password. Check your local RADIUS dictionary to find ); # ユーザー名とパスワードの組み合わせ (アトリビュート:属性) を、ACCESS_REQUEST で送る。 # そうすると返事が返って来るので recv_packet で受け取る。 $r->send_packet(ACCESS_REQUEST) and $type = $r->recv_packet(); print "server response type = $type\n"; # サーバから送られてきたアトリビュートを表示してみる。 for $a ($r->get_attributes()) {
    print "attr: name=$a->{'Name'} value=$a->{'Value'}\n";
}
続きを読む

Perl で、角丸画像を作成する。

オンラインで角丸画像を作成することができます。画像をアップロードすると、サーバ側で角丸画像が生成されてブラウザに表示されます。利用できるフォーマットは、JPEG、PNG、BMP です。

角丸み度の半径(ピクセル) :
角丸のアンチエイリアス : する しない
角丸の部分の背景色 :
角丸する画像ファイル :
 
続きを読む

Perl で、Base64 のファイルをデコードして元のバイナリファイルに戻す方法

メールに添付されてきた .pdf ファイルが巨大すぎてメールサーバによって分割されて自分のところに配信された結果、Base64 のデータがバラバラに届いたケースを考える。

このような場合は Perl が活躍する。まず、バラバラになった Base64 のファイルは仕方がないのでエディタを使って手作業でくっつけて 1つのファイルにする。そのあと、以下のコマンドを実行すればよい。

使用するモジュール use MIME::Base64; perl -MMIME::Base64 -ne 'print decode_base64($_)' < くっつけたBase64ファイル名.txt > 出力ファイル名.pdf (上は、すべて1行に書く)
続きを読む

サイトのリンク切れの検出チェックをするには?

checkbot を利用するといいだろう。

これは Perl ベースのコマンドラインツールで、実行するとリンク切れをチェックして HTML を出力する。その HTML に書き出された検出結果をブラウザから見るという使い方。

この checkbot、UTF-8 で書かれたサイトを指定してて実行すると、

Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/site_perl/5.8.7/LWP/Protocol.pm line XXX, line 1.

などのエラーが出るが、気にしないでよい。実行例としては、

./checkbot --url http://perltips.twinkle.cc/ --internal-only --ignore "\.js|hatena\.ne\.jp|\.ico" ※本当は全部 1行

のような感じで、上の例だと、http://perltips.twinkle.cc/ (このサイト)を対象にして、JavaScript のリンク (.js)、hatena.ne.jp、アイコンファイル (.ico) を無視し、サイト内だけリンク切れをチェックする、という設定である。

続きを読む

Perl で、POST したい。

Perl で POST するには、LWP で

my $req = HTTP::Request->new(POST => $url);

として URL を指定し、

$req->content_type('application/x-www-form-urlencoded'); $req->content('Entity=Flight&ContractID=490&Enroute=N&FlightCategory=...');

のように POST するデータを与えればよい。サーバ(CGI スクリプト)に渡すパラメータは、URL の 「?」 の後に続き、<パラメータ名1>=<値1&gt&amp;<パラメータ名2>=<値2&gt&amp;<パラメータ名3>=<値3&gt&amp;…といった形で、「&amp;」 を用いていくつものパラメータと値の組み合わせをつなげることが出来る。 </p>

以下は、FryteComm というサイトにアクセスして、XML で現在のフライト状況を取得するサンプルである。飛行機が遅れているかどうかの状況がわかる。

使用するモジュール

use LWP::UserAgent; #!/usr/bin/perl -w use LWP::UserAgent; our $ua = LWP::UserAgent->new; our $url = 'http://applecomputer:apc0606jb@flytesource.flytecomm.com/FlyteSourceGeneratorWebApp/Application'; our $query_string = 'Entity=Flight&ContractID=490&Enroute=N&FlightCategory=COM&DataView=detail&DepartureAirportCode=SFO&ArrivalAirportCode=NRT&AirlineCode=UA&FlightNumber=837'; my $req = HTTP::Request->new(POST => $url); $req->content_type('application/x-www-form-urlencoded'); $req->content($query_string); my $res = $ua->request($req); print $res->as_string; 1;
続きを読む
インターネット を購読