3

localhost で実行されている Java サービスに接続するための perl スクリプトを用意し、暗号化された Cookie を渡し、復号化されたデータを返します。コマンドラインからスクリプトを実行すると、正常に動作します。apache ユーザーにシェルを与えて、そのユーザーとしてコマンドラインから実行しても問題なく動作します。スクリプトが apache から CGI として実行される場合、ソケット new は undef と $! を返します。「許可が拒否されました」と設定されています。???

このサーバーで CentOS 6.3 を実行しており、IPtables が無効になっています。

#!/usr/bin/perl

use strict;

use CGI;
use IO::Socket;
use JSON;

my $cgi = CGI->new();

my $cookie = $cgi->cookie('attESSec') || shift (@ARGV) || undef;
my $data = JSON::false;

if($cookie){
  my $socket = IO::Socket::INET->new(
    'PeerHost' => '127.0.0.1',
    'PeerPort' => '1500',
    'Proto'    => 'tcp'
  );
  if($socket){
    $socket->send($cookie . "\r\n");
    $socket->recv(my $auth,1024);
    $socket->close();
    chomp($auth);
    if($auth){
      $data = (split(/\|/,$auth))[5];
    }
  }
  else{
    $data = $!;
  }
}

print($cgi->header('application/javascript'));
print(JSON->new()->allow_nonref()->utf8()->encode($data));

exit();
4

1 に答える 1