パスワード設定をコードに書かないようにするには Config::Pit をつかいます。
アカウント情報が必要なWebサービスを利用するスクリプトを作るとき、アカウントやパスワードをスクリプトのコードに直接書き込むと(ハードコーディング)、そのスクリプトがほかの人に見られてしまうことによりパスワードが漏洩してしまいます。
Config::Pitは、外部ファイルにWebサービスのアカウント情報を格納しておき、スクリプト側で必要なときに、読み出しできるようにします。これにより、スクリプト内にアカウント情報をハードコードすることがなくなり、スクリプト単体でのパスワード漏洩が防げます。
例:コードを配布しようとして、
#!/usr/bin/perl use strict; use warnings; use utf8; use Encode; use WWW::Mechanize; my $username = 'ABC01234'; my $password = 'password'; my $mech = WWW::Mechanize->new(); $mech->agent_alias( 'Windows Mozilla' ); # main (my $text = decode( 'utf8', shift ) ) =~ tr/[\x00-\x1f\x7f]//d; login( $username, $password ); post ( encode( 'utf8', $text ) ); exit; sub login { my $username = shift; my $password = shift; my $res = $mech->get('http://aboutme.jp/mypage'); $mech->set_visible( $username, $password ); $mech->submit(); if ( $mech->uri() eq 'https://aboutme.jp/account/login' ) { die 'Login Failed.'; } return; } sub post { my $text = shift; my $res = $mech->get('http://aboutme.jp/mypage'); $mech->form_number(2); $mech->set_visible( $text ); $mech->submit(); return; }
となっていると、アカウントやパスワードがまるみえです。アカウント情報の管理にConfig::Pitを使用することによって、コードからアカウント情報を分離できます。
アカウント情報が格納された設定ファイル自体は、~/.pit/ 内に格納されます。スクリプト単体からのパスワード漏れは防げますが、設定ファイルの取り扱いに注意する必要があります。
CPANからConfig::Pitをインストールすると、コマンドラインからppitが使えるようになりますが、ここでは、Perlからのアクセスの方法を紹介します。
use strict;
use warnings;
use Config::Pit;
# 設定
Config::Pit::set("example.com", data => {
username => "foobar",
password => "barbaz",
});
または、ワンライナー
$ perl -MConfig::Pit -e'Config::Pit::set("example.com", data=>{ username => "foobar", password => "barbaz" })'
use strict;
use warnings;
use Config::Pit;
# 読み出し
my $config = pit_get("example.com" , require => {
"username" => "your username on example",
"password" => "your password on example",
});
die 'pit_get failed.' if !%$config;
my $username = $config->{username} or die 'username not found.';
my $password = $config->{password} or die 'password not found.';
print "username: $username, password: $password\n";
Config::Pit::setで格納、pit_getで読み出します。
greenの箇所は、読み出しエラーチェックです。エラーチェックで止めない場合、$configは{}、$username, $passwordはundefとなります。
その他の使用方法は以下で確認してください。
Last modified: $Date: 2008-05-22T09:21:23.154313Z $