Bezpieczny base64 dla adresów URL
Ile to razy potrzebujemy przesłać np. GET'em (np. w pasku adresu) dane, które zawierają "dzwine" znaki ?
W takiej formie nie jesteśmy w stanie tego zrobić. Przykładem mogą być wysublimowane żądania w aplikacjach REST, w których to nie chcemy jawnie przesyłać takich niepożądanych znaków.
W przykładzie tym pokażę szybki i dobrze znany sposób na "bezpieczny" URL. Musimy jednak pamiętać, że base64 daje bardzo duży narzut kodu i dla żądań GET może się okazać za ogromny, lecz dla mniejszych przypadków nadaje się w 100% a przy tym fajnie działa.
Jeśli masz do przekazania dużą ilość danych to w formularzu umieść atrybut enctype i ustaw
... <form enctype="multipart/form-data">...</form>
...oznacza to tylko tyle co z wolnego tłumaczenia tego atrybutu, mianowicie jeśli treści będzie odpowiednio duża ilość to zostanie ona podzielona na segmenty, wysłana do serwera a na końcu złożona w całość i zaprezentowana w superglobalnej tablicy $_POST
Kod klasy safe_base64
<?php class safe_base64 { public static $decoded_signs = Array("+", "/", "-", "="); public static $encoded_signs = Array("__P__", "__S__", "__M__", "__E__"); public static function encode($string) { return str_replace(static::$decoded_signs, static::$encoded_signs, base64_encode($string)); } public function decode($encoded_string) { return base64_decode(str_replace(static::$encoded_signs, static::$decoded_signs, $encoded_string)); } } ?>
Przykład użycia klasy safe_base64
<?php $string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean pretium interdum nulla, vel commodo est mattis sed. Nam ut dictum massa, quis semper enim. Integer eros justo, vehicula in sapien at, eleifend aliquet nisi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas"; $encoded = safe_base64::encode($string); $decoded = safe_base64::decode($encoded); echo "<p>Po kodowaniu: znakow <em>".strlen($encoded)."</em></p>"; print_r($encoded); echo "<hr />"; echo "<p>Po rozkodowaniu: znakow <em>".strlen($decoded)."</em></p>"; print_r($decoded); ?>
...a jeśli ten sposób jest jednak za ciężki proponuję użyć metody POST
Jeśli wersja Twojego parsera PHP jest mniejsza od 5.3 zamiast static:: użyj self::. Sprawdzenie wersji zawsze po uruchomieniu funkcji phpinfo();
0 komentarzy - Kliknij, aby skomentować