Wpis z mikrobloga

#zagadkihakerskie #programowanie #php #regex

Tym razem nieoryginalna zagadka, z którą być może część z was się spotkała. W dawniejszych czasach w manualu PHP zaproponowano taki kod do usuwania niebezpiecznych elementów z wejścia:

// $document should contain an HTML document.

// This will remove HTML tags, javascript sections

// and white space. It will also convert some

// common HTML entities to their text equivalent.

$search = array ("']*?>.*?'si", // Strip out javascript

"'<[\/!]*?[^<>]*?>'si", // Strip out HTML tags

"'([\r\n])[\s]+'", // Strip out white space

"'&(quot¦#34);'i", // Replace HTML entities

"'&(amp¦#38);'i",

"'&(lt¦#60);'i",

"'&(gt¦#62);'i",

"'&(nbsp¦#160);'i",

"'&(iexcl¦#161);'i",

"'&(cent¦#162);'i",

"'&(pound¦#163);'i",

"'&(copy¦#169);'i",

"'&#(\d+);'e"); // evaluate as php

$replace = array ("",

"",

"\1",

"\"",

"&",

"<",

">",

" ",

chr(161),

chr(162),

chr(163),

chr(169),

"chr(\1)");

$text = preg_replace($search, $replace, $document);

?>

Jak można się domyślić - ten kod nie jest całkiem poprawny i pomimo, że ma usuwać tagi HTML-owe, można coś takiego wpisać na wejściu, że na wyjściu te tagi i tak się pojawią. Waszym zadaniem jest podanie takiego wejścia, że na wyjściu będzie:

**wykop**
  • 16
@almafater: Ani nie znałem, ani się nie spotkałem, ani też jakoś za specjalnie nie przepadam za php. ;) Na szybko z ciekawości sprawdziłem czy zadziała i okazało się że tak. :P
@Jon_Shannow: By być konsekwentnym, musiałem usunąć za brak spoilera ;)

@AltumVidetur: No wrzuciłem dwie zagadki wcześniej. Na pewno nie będą już dalej z taką częstotliwością jak były w ostatnich dniach, ale co jakiś czas będę tam wrzucał jakieś ciekawe strony czy kody, cokolwiek do złamania.
Ochrona przed zagrożeniem:

Tutaj był przykład niepoprawnego kodu, który próbował usuwać tagi HTML-owe, ale robił to w sposób niewłaściwy. Moim zdaniem usuwanie tagów HTML-owych prawie nigdy nie jest dobrym rozwiązaniem, zawsze lepiej po prostu dane enkodować na wyjściu. Po szczegółowy opis jak się przed XSS-ami chronić, odsyłam do OWASP-u.