GNUPG Unikající odrážel data shell_exec

hlasů
0

Opravdu chci jít o to bezpečně, protože je zde údaje o zákaznících s nimi spojené.

Já používám GnuPG přes příkazovou řádku, protože jsem na sdílený hosting, a třída PHP není k dispozici. Takže můj kód je následující:

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} );

Tak, jak mohu jít o útěku $plain, při zachování integrity dat?

Kdybych stačí použít escapeshellcmd()to inklinuje k zkazit formátování.

Jsem trochu pochybují, zda se úspory nic do souboru, protože je citlivá data na sdílený hosting.

Položena 13/09/2011 v 00:07
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Nevím php velmi dobře, ale už jste považován za použití proc_opennikoli shell_exec? Zdá se, že čistší než vyvolání příkazu shell echo vstup a potrubí, aby to gpg.

Ale pokud byste raději použít proc_open, zvažte použití printf, nikoli echo -n; má lépe definovat chování. Například (nevyzkoušené):

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

S echo, vystavujete se riziku, že echopříkaz (což může být buď shell vestavěný nebo /bin/echopříkaz) by mohl interpretovat některé ze svých argumentů, jako něco jiného, než struny, které mají být vytištěny.

Odpovězeno 13/09/2011 v 01:03
zdroj uživatelem

hlasů
0

Už jste se pokusil pomocí escapeshellarg? A echopřidává nový řádek na konec řetězce na výstupu, takže možná budete chtít použít -n: Demo

<?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;
Odpovězeno 13/09/2011 v 00:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more