148 PHP i MySQL dla każdego
Rysunek 5.7. Lista plików |
Pik Edycja Wjdok Przejdź Zakładki Narzędzia Pornos | |
przez kod |
, _ J - L^> - ^ : | J hKp:/jloca*ofl/index.html |
il |
z listingu 5.10 |
^ Rozpocznij przygód... O Aktualności | |
Pierwszy plik Drugi plik Trzeci plik Czwarty plik Piąty plik |
W szczególności należy zwrócić uwagę na punkt 2. Sprawdzenie poprawności przesłanych danych jest niezbędne, gdyż inaczej możemy doprowadzić do sytuacji, kiedy odpowiednio spreparowany ciąg znaków, przesłany jako parametr dla skryptu, pozwoli potencjalnemu włamywaczowi na pobranie dowolnego pliku z serwera. Jak sprawdzić poprawność danych? Można stosować różne metody weryfikacji, np. sprawdzanie, czy przesłany ciąg nie zawiera znaków potencjalnie niebezpiecznych (jak ., .., /)4. My
zastosujemy sposób niezbyt wygodny, ale za to bardzo bezpieczny. Sporządzimy listę plików, które mogą być pobierane, i za każdym razem będziemy sprawdzać, czy przesłana nazwa znajduje się na tej liście. Listę umieścimy w skrypcie, w tablicy. W związku z tym kod skryptu downloadphp będzie miał postać jak na listingu 5.11.
Listing 5.11. Skrypt wysyłający żądany plik do przeglądarki
<?php
SfilesPath =
function checkFileName($name)
Spliki - array(
1 => "plikl.zip",
2 -> "plik2.zip"
return array_search($name. Spliki):
function sendtSfileName. SfilePath)
i f(!fi 1e_exi sts(Sfi 1ePath.Sfi 1eName)){ echoCNie ma takiego pliku na serwerze!'): return:
Sfd = fopen($filePath.$fileName,"r”):
Ssize = fi 1esi ze($fi1ePath.$fi leName):
Scontents = fread($fd. filesize(SfilePath.SfileName)):
Różne metody weryfikacji zostały zaprezentowane m.in. w książkach: PHP 101 praktycznych skryptów, Helion 2003, ISBN 83-7361-127-4 oraz 505 praktycznych skryptów dla webmastera, Helion 2005, ISBN 83-7361-749-3.