Автор Тема: КАк правильно вызвать внешнюю программу, не нарушая безопасности скрипта?  (Прочитано 3742 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн koliama

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Доброго всем дня.

Пишу следующую конструкцию
#!/usr/local/bin/perl -wT

use strict;
use IO::File;

my $file = new IO::File "/usr/local/bin/traflog -n -i lnc0 -a -o nik |" or die "Not run program traflog: $!\\n";

while(defined(my $line = <$file>))
{
    chomp();
    #$_ = $line;
    my ($src_ip, $sport, $dst_ip, $dport, $proto, $fday, $fmonth, $fyear, $ftime, $fsize ) = split(/\\s+/);
    my $year = 2000+$fyear;
    my $fdate = "$year-$fmonth-$fday";
    my $id;
    $add -> execute( $id, $src_ip, $sport, $dst_ip, $dport, $proto, $fdate, $ftime, $fsize );
}
где строка my $file = new IO::File "/usr/local/bin/traflog -n -i lnc0 -a -o nik |" - закладывает в переменную $file выходной поток из программы traflog

При попытке запустить этот скрипт перл ругается
Insecure $ENV{PATH} while running with -T switch at ./traf_to_mysql.pl line 21.
Как можно по другому переписать данную конструкцию?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
perldoc perldiag
Цитировать
      Insecure $ENV{%s} while running %s
           (F) You can\'t use system(), exec(), or a piped open in
           a setuid or setgid script if any of $ENV{PATH},
           $ENV{IFS}, $ENV{CDPATH}, $ENV{ENV} or $ENV{BASH_ENV}
           are derived from data supplied (or potentially supґ
           plied) by the user.  The script must set the path to a
           known value, using trustworthy data.  See perlsec.
The documentations is your friend

Оффлайн koliama

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
NeoNox
а не поясните мне что означает понятие taint mode в perlsec?

Оффлайн koliama

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
если я правильно понимаю, то надо в скрипте указать $ENV{PATH} - системные пути (каталоги) в которых разрешен запуск программ?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
koliama ссылку на переводчик дать?
The documentations is your friend

Оффлайн koliama

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
NeoNox
Переводчик перевел выражение taint mode - как запятнаный режим - что очень помогло в понимании этого термина :)
Теперь по делу. Написал такую конструкцию
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
my $path = $ENV{\'PATH\'} = \'/usr/local/bin\';
my $file = new IO::File "/usr/local/bin/traflog -n -i lnc0 -a -o nik |" or die "Not run program traflog: $!\\n";
с ней работает без ругани на -Т. Но не уверен правильно ли так..

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
[off]
интересный способ выдергивать траффик из трафлога.
я по другому в свое время делал
[/off]
AS IS...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Перевод дает понятие что это такое если слово запятнаный изменить на меченый.
Правильно.
Ты же perlsec с картинками читал ;)
The documentations is your friend

Оффлайн koliama

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 35
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
NeoNox
C картинками, по ним и делал, как видишь :)

ThE0ReTiC
способов всегда несколько. мне понравился этот :)
[OFF]

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28