Sziasztok,
adva van egy
https://domain.tld/cgi-bin/ls?sub1/sub2/..
perl CGI szkript, melynek célja, hogy a /var/www/public/
alatti hierarchiát listázza.
Ebbeb a CGI szkriptben gondoskodni kell egy megfelelő
path=s///; kifejezésről mely törli az esetlegesen kézzel bevitt nem-biztonságos karaktereket úgy, mint vezető / többszörös pontok és így tovább.
Nézegetem a CGI biztonsági doksikat, de még nem találtam meg egyértelműen a legjobb
parh =~ s///
kifejezést, help!, mi a legjobb? Előre is nagyon köszi!
- 1080 megtekintés
Hozzászólások
up!
hahó, van itt biztonsági szakember? :-))
- A hozzászóláshoz be kell jelentkezni
Talán ezzel próbalkoznék:
use Cwd 'abs_path';
my $realpath = abs_path($path);
if ($realpath !~ m|^/var/www/public/|) {
kabbe();
} else {
listazz($realpath);
}
- A hozzászóláshoz be kell jelentkezni
igen, ez is egy lehetséges megkötezelítés, hogy eleve megmondom, mi lehet az QUERY_STRING-ben átadott path, és ha nem felel meg az abs_path-ban megadott alap útvonalnak akkor teljesen eldobom,
de én nem igazán ezt szeretném, hanem azt, hogy bármit megad, abból kiszedem a nem-kívánatos karaktereket, de amúgy hadd legyen rugalmas (mintha például, mikor azt mondja, hogy wiki/akár/mi és létre is jön az adott path), ezért keresek egy jó cserélő kifejezést, amivel a sor elejéről a /-t és globálisan a többszörös . karaktereket szűröm ki! :-)
- A hozzászóláshoz be kell jelentkezni
Így?
$path =~ s|^/||;
$path =~ s/\.{2,}//;
Ha meg azt szerenéd, hogy a megadott elé kerüljön a /var/www/public, akkor:
$path = '/var/www/public/'. $path;
- A hozzászóláshoz be kell jelentkezni
$path =~ s|^/||;
$path =~ s/\.{2,}//;
hát valami ilyesmi, igen, csak szerettem volna 1 blikkfangos kifejezéssel megoldani a nem-kívánt karakterek szűrését, de nem jöttem rá, hogy lehetne, de hátha, thx eddig :-)
- A hozzászóláshoz be kell jelentkezni
Mivel ket kulon kontextusban kell keresni, ezert sztem mindenkepp ket regex kell.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
...
my $realpath = abs_path('/var/www/public/'. $path);
...
Így helyes(ebb) az első javaslat.
- A hozzászóláshoz be kell jelentkezni