[bglug] [Qt4][python] QIcon e icona presa dal web

enzo enzo.arlati@libero.it
Dom 10 Lug 2011 18:46:35 CEST



On 07/10/2011 04:36 PM, Dario Bertini wrote:
> a 2 giorni di distanza, ma mi sono finalmente deciso a controllare :P
>
> "use strict" di per se', pare che non faccia nulla per fermare l'uso di system()
>
>
> ma di per se, neanche questo blocca l'uso di system()
>
> ci sarebbero poi i flag -t e -T, che bloccano tutto quando individuano
> variabili tainted (come č considerato il PATH, quindi per eseguire una
> system() bisogna cosė ripulirlo)
>
> insomma: le seguenti righe, a me funzionano perfettamente e senza
> warning di sorta (chiamando perl con "perl -wT")
>
> use strict;
> use autodie qw(:all);
> $ENV{"PATH"} = "";
> system("/usr/bin/locate bashrc");
>
>
> mi č sfuggito qualcosa, qualche flag?
>
Hai ragione pure tu, e' il flag T quello che verifica questo tipo di 
pericolosita' del codice.
Il codice tainted che viene bloccato non e' comunque un codice che chiama
system, ma un codice insicuro che chiama system.
Se il comando che vuoi passare a system e' cablato nel programma ad esempio,
questo viene considerato sicuro, perche' e' basso il rischio che venga alterato.
Diversamente , se il comando viene passato come parametro di  input questo
codice viene bloccato, a meno di non renderlo sicuro tramite una controllo con
regular espression.

esempio, questo codice viene considerato sicuro:
#!/usr/bin/perl -T

use strict;
use warnings;

my ( $rslt );
my ( $cmd ) = "/usr/bin/locate bashrc ";
$ENV{PATH} = "";
print "COMMAND => $cmd \n";
@$rslt = qx( $cmd );
print "RESULT => \n" . join "", @$rslt;


Mentre questo  non lo 'e:

#!/usr/bin/perl -T

use strict;
use warnings;

my ( $rslt );
my ( $cmd ) = "/usr/bin/locate bashrc ";
$cmd = $ARGV[0] if defined $ARGV[0];
$ENV{PATH} = "";

print "COMMAND => $cmd \n";
@$rslt = qx( $cmd );
print "RESULT => \n" . join "", @$rslt;

[enzo@enzo7 tmp]$ ./pippo.pl  /bin/hostname
COMMAND => hostname
Insecure dependency in `` while running with -T switch at ./pippo.pl line 12.

Per rendere il codice sicuro devi riassegnarlo tramite un parsing fatto con
espressioni regolari. come nell' esempio che segue

#!/usr/bin/perl -T

use strict;
use warnings;

my ( $rslt );
my ( $cmd ) = "/usr/bin/locate bashrc ";
$cmd = $ARGV[0] if defined $ARGV[0];
$ENV{PATH} = "";

# abilita solo comandi composti da lettere minuscole e '/'
if ( $cmd =~ /^([a-z\/]+)$/ ) { $cmd = $1; }; 
print "COMMAND => $cmd \n";
@$rslt = qx( $cmd );
print "RESULT => \n" . join "", @$rslt;










-- 

 _
(°)-   REPLY TO:          
//\    perl -e 'print qq^VVCWCQJUVD00YQVWKVBPG^^qq^3898m08970Yp584299l93^ ' 
V_/_   http : http://earlati.com 
       blog : http://loose-bytes.blogspot.com/



Maggiori informazioni sulla lista bglug