— — : — — : — —

[ Z warsztatu · 2 min czytania ]

Niewidocznenie znaczyprywatne.

Jeśli Wasza strona zna dane, których nie pokazuje — marżę, cenę hurtową, notatkę wewnętrzną, adres, który miał zostać ukryty — jest spora szansa, że i tak leżą w jej kodzie, czytelne dla każdego. Nie chodzi o włamanie, tylko o to, jak nowoczesne strony przesyłają dane. Wiemy, bo sami się na tym przejechaliśmy.

Prywatność danychStrony www
01

Co się stało

Potrzebowaliśmy oznaczyć, które wpisy w pewnej sekcji są jeszcze robocze. Naturalny odruch: dołożyć do rekordu pole logiczne i nie renderować go nigdzie. Sprawdziliśmy w przeglądarce zawartość sekcji — pola nie było. Wydaliśmy.

Po wydaniu przeczytaliśmy źródło strony na żywym adresie. Pole siedziało w nim obok każdego rekordu, którego dotyczyło. Strona publikowała własną listę wpisów roboczych — dokładne przeciwieństwo tego, po co ta flaga powstała.

Sonda po drzewie dokumentu nie orzeka o tym, czego na stronie NIE MA. Orzeka o tym dopiero kod, który serwer naprawdę wysyła.
02

Dlaczego tak działa nowoczesny framework

Współczesne frameworki dzielą komponenty na serwerowe i przeglądarkowe. Gdy komponent serwerowy przekazuje dane do przeglądarkowego, framework musi je przesłać — więc zapisuje je w kodzie strony jako gotowy pakiet do odtworzenia. Trafia tam CAŁY przekazany obiekt, nie tylko te pola, które ktoś wyświetla.

Pakiet leży w znacznikach skryptu, poza drzewem treści. Dlatego sonda pytająca „czy w tej sekcji jest taki tekst” odpowiada uczciwie „nie ma” — bo w sekcji faktycznie go nie ma. Jest w tym samym pliku, tyle że w znacznikach skryptu — w praktyce w jednej długiej linii, której nikt nie przewija wzrokiem.

03

Reguła, która z tego wyszła

Wszystko, co wejdzie do słownika treści strony, jest treścią PUBLICZNĄ — także pola, których żaden komponent nie wyświetla. Metadane o treści (status roboczy, notatka redakcyjna, cokolwiek wewnętrznego) trzymamy poza katalogiem źródeł strony. U nas mieszkają w narzędziu kontrolnym, które w ogóle nie wchodzi do wydania.

Druga połowa reguły dotyczy sprawdzania: żeby orzec, że czegoś na stronie NIE MA, nie wystarczy spojrzeć na to, co widać. Trzeba przeszukać to, co serwer naprawdę wysyła — cały wynik budowania i pobrany kod żywej strony. Od tego incydentu robimy to przy każdym wydaniu dotykającym danych; na razie z listy kontrolnej, bo automat, który odmówi publikacji, dopiero powstanie.

Ta sama zasada ma prostszy wariant, wart sprawdzenia na każdej stronie: jeśli w danych sklepu siedzi cena hurtowa, a wyświetlana jest detaliczna, to obie są publiczne — o ile te dane trafiają do przeglądarki. Odfiltrowane po stronie serwera publiczne nie są. Różnica jest w tym, co serwer wysyła, nie w tym, co rysuje.