GNUPG Выход из отраженных данных в shell_exec - PullRequest
0 голосов
/ 13 сентября 2011

Я действительно хочу сделать это безопасно, так как здесь задействованы данные клиентов.

Я использую GNUPG через командную строку, потому что я на виртуальном хостинге, а класс PHP недоступен. Итак, мой код выглядит следующим образом:

putenv("GNUPGHOME=/home/me/.gnupg");

$gpg = '/usr/bin/gpg';
$gpgrecipient = 'email';
$mailrecp = 'email';
$plain = 'Here is the encrypted Text Here is the encrypted Text Here is the
    encrypted Text Here is the encrypted Text Here is the encrypted Text Here is the
    encrypted Text Here is the encrypted Text Here is the encrypted Text Here is the  
    encrypted Text';



$encrypted = shell_exec("echo {$plain} | {$gpg} --no-auto-check-trustdb --lock-never -e -a -r {$gpgrecipient} ");

Итак, как мне избежать экранирования $plain при сохранении целостности данных?

Если я просто использую escapeshellcmd(), это может испортить форматирование.

Я немного опасаюсь что-либо сохранять в файл, потому что это конфиденциальные данные на виртуальном хостинге.

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Я не очень хорошо знаю php, но вы рассматривали возможность использования proc_open вместо shell_exec? Это кажется чище, чем вызывать команду оболочки для вывода ввода и передачи его на gpg.

Но если вы предпочитаете использовать proc_open, рассмотрите возможность использования printf вместо echo -n; у него лучше определенное поведение. Например (не проверено):

$encrypted = shell_exec("printf '%s' '{$plain}' | {$gpg} ...`

С echo вы рискуете, что команда echo (которая может быть либо встроенной в оболочку, либо команда /bin/echo) может интерпретировать некоторые из своих аргументов как нечто отличное от строк, которые будут напечатаны.

0 голосов
/ 13 сентября 2011

Вы пробовали использовать escapeshellarg? И echo добавляет новую строку в конец строки на выходе, поэтому вы можете использовать -n: Демо

<?php

$gpg = '/usr/bin/gpg';
$gpgrecipient = 'email';
$mailrecp = 'email';
$plain = 'Here is the encrypted Text Here is the encrypted Text Here is the
    encrypted Text Here is the encrypted Text Here is the encrypted Text Here is the
    encrypted Text Here is the encrypted Text Here is the encrypted Text Here is the  
    encrypted Text';


$plain = escapeshellarg($plain);

$cmd = "echo -n {$plain} | {$gpg} --no-auto-check-trustdb --lock-never -e -a -r {$gpgrecipient} ";

echo $cmd;
...