Perl-users.jp

パスワード設定をコードに書かない(Config::Pit)

パスワード設定をコードに書かないようにするには 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 $