====== PHP: Bezpieczne przesyłanie plików w PHP ====== aplikacja dostępna pod linkiem: https://wiki.ostrowski.net.pl/copy-file/ ===== Strona powitalna ===== * Po wejściu na index.php użytkownik widzi dwa przyciski: „I’m Sender” i „I’m Receiver”. * Wybierając jedną z opcji, przechodzi do odpowiedniego trybu — nadawcy lub odbiorcy. ===== Generowanie kodu („Sender”) ===== * Gdy klikniesz „I’m Sender”, aplikacja losuje przyjazny kod w postaci dwóch członów: przymiotnik‑zwierzę (np. brave-fox, calm-owl). * Ten kod nie jest samą nazwą katalogu, a jedynie ziarnem (seedem) do dalszych kroków. ===== Przypisanie katalogu ===== * Na podstawie unikalnego kodu tworzone jest losowe ID katalogu (np. a3f1b5c7d9e2f0a1…), zapisane w pliku mappings/. * Jednocześnie powstaje fizyczny katalog uploads//, w którym będą przechowywane zaszyfrowane pliki. ===== Derywacja klucza szyfrującego ===== * Klucz AES‑256 do szyfrowania/dekryptowania wyprowadzany jest w locie z kodu użytkownika: SHA‑256(kod) → bity → klucz (32 bajty). * Dzięki temu klucz nigdy nie jest zapisywany na dysku. ===== Wysyłanie pliku (upload) ===== Nadawca wybiera plik i wysyła go formularzem. **Aplikacja:** * Odczytuje oryginalny plik z tymczasowego miejsca. * Generuje losowy wektor inicjalizujący (IV) 16 bajtów. * Szyfruje zawartość pliku algorytmem AES‑256‑CBC (używając klucza i IV). * Zapisuje do uploads//.enc zawartość: [IV][szyfrogram]. ===== Wyświetlenie kodu ===== Po udanym uploadzie nadawca widzi komunikat ze swoim kodem (np. brave-fox) i może go przekazać odbiorcy. ===== Usuwanie danych po zamknięciu (cleanup) ===== W widoku nadawcy skrypt JavaScript nasłuchuje zdarzenia unload (zamykania/odświeżania strony). Jeśli użytkownik nie klika właśnie „Wyślij” (czyli naprawdę opuszcza kartę), wysyłany jest lekki sygnał (navigator.sendBeacon) z parametrem mode=cleanup&code=. Na serwerze obsługa tej akcji usuwa katalog uploads// i plik mapujący mappings/. ===== Odbieranie pliku (Receiver) ===== W trybie odbiorcy pojawia się formularz, w który trzeba wpisać otrzymany od nadawcy kod (np. brave-fox). **Po zatwierdzeniu:** * Aplikacja odczytuje z pliku mappings/brave-fox odpowiadające mu ID katalogu. * Przegląda zawartość uploads// i listuje wszystkie pliki .enc. * Ściąganie pliku (download) Odbiorca klika „Download” przy wybranym zaszyfrowanym pliku. **Serwer:** * Odczytuje uploads//.enc. * Oddziela IV (pierwsze 16 bajtów) od szyfrogramu. * Dekryptuje zawartość tym samym kluczem wyprowadzonym z kodu. * Wysyła ode­szyfrowany plik w odpowiedzi jako załącznik. **Powtórne użycie i bezpieczeństwo** * Odbiorca nie przechowuje kodu w sesji — za każdym razem musi go wpisać od nowa. * Katalogi na serwerze mają losowe nazwy, niepowiązane jawnie z kodem, co zapobiega odgadnięciu klucza. * Klucz szyfrujący nigdy nie trafia na dysk — jest zawsze generowany w pamięci. **Dzięki tej procedurze:** * Bezpieczeństwo: klucz nie zapisuje się w plikach, kod nie ujawnia nazwy katalogu. * Łatwość użycia: prosty, czytelny kod typu adjective-animal. * Automatyczne czyszczenie: nadawca nie pozostawia śladów po zamknięciu sesji. ===== Kod Rozwiązania ===== {$name}.
Share this code:
{$code}"; } else { $error = "Encryption failed."; } } } } // 4) RECEIVER ENTER CODE if ($_SERVER['REQUEST_METHOD']==='POST' && $_POST['mode']==='receiver' && !empty($_POST['code']) ) { $code = $_POST['code']; if (!valid_code($code)) { $error = "Invalid code."; } // else $code is used for this request only } // —————————————————————————————————————————————— // PAGE ?> Secure File Exchange

Secure File Exchange

Sender

Your code:

← Back

Receiver

Waiting for sender…

← New code

Invalid mode.

Back