Portál AbcLinuxu, 8. května 2025 18:09
Vypisujem cez PHP na stranke adresu, URL je moja (natvrdo v zdrojaku), a pouzivatel zada len text ktory bude na tuto adresu odkazovat. Bezpecne sa to escapuje takto (vystupom je html):
echo '<a href="http://example.com/123">'.htmlspecialchars($_REQUEST['nazov']).'</a>';
Co ak ale chcem aby pouzivatel zadal aj URL? Je toto bezpecne?
echo '<a href="'.htmlspecialchars($_REQUEST['url']).'">'.htmlspecialchars($_REQUEST['nazov']).'</a>';
Je mozne pouzit tu istu funkciu na escapovanie htmlspecialchars? Alebo tym ze je to v href="__tu__" musim pouzit ineco ine? Co?
Pozn: Realne tam este mam obmedzenie max. dlzky na 1000, htmlspecialchars(substr($_REQUEST['nazov'] ,0,1000)), vynechal som to lebo to s escapovanim priamo nesuvisi.
Cize spravne je to takto?
echo '<a href="'.urlencode($vstup1).'">'.htmlspecialchars($vstup2)).'</a>';
To je síce zneužiteľná chyba, ale v praxi nie príliš často.Jde tam strčit JavaScript a přečíst si pomocí něj cookie (pokud nemá nějaký flag?) nebo dělat jiné podobné skopičiny (protože ten JS má nastavené takové to origin policy a tak může číst třeba DOM stránky včetně anti-CSRF tokenů), ne?
function html($str) { return htmlspecialchars($str, ENT_COMPAT | ENT_HTML5, 'UTF-8', true); }Samozřejmě nahraď ENT_HTML5 a kódování podle toho, co používáš. A pak:
echo '', html($_REQUEST['nazov']), '';Pak ale není dobré jen tak rovnou použít vstup uživatele bez dalšího ověřování. Co by se stalo, když by někdo vyrobil ošklivý odkaz a poslal ho své oběti? To je však specifické pro každou aplikaci a pokaždé je vhodné to řešit trošku jinak. Rozhodně je však vhodné se nad tím zamyslet.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.