INDEVELOPMENTbeta






Subskrybuj m1chu.eu – another devblog
 
  •  Pawel: Witam Na stronie http://www.rozenek.com/polski, 198 opisalem podobny problem:...
  •  wwww: Geniusze IT w Warszawie http://capital24.tv/film/4c336 f2d7c878/geniusze_it_w_warszaw ie
  •  Kpc21: Na Operze 10.53 działa już w postaci docelowej, bez „-o-”.
  •  m1chu: Prawda, to nie są strony zbyt funkcjonalne. Dlatego większość z nich to portfolia/personalne...
  •  No flash: Prawie wszystkie te strony to odwiedzić raz i już potem na nie nie wracać. Na pewno nie ułatwiają...
  •  m1chu: Faktycznie, lepiej brzmi. Zmieniłem, a komentarz nikogo nie obraża – więc może zostać :]
  •  bigZbig: Artykuł merytorycznie bardzo fajny tylko proszę zmień zdanie “wszelkie metody oraz funkcje...

Ankieta!

  • Jak oceniasz poziom artykułów? (dokładną opinię umieść w komentarzu)

    View Results

    Loading ... Loading ...




Przekazywanie tablic w memberlist.php – phpBB by Przemo 1.12.5


Dziś napisał do mnie d3d!k z prośbą o rejestrację na pewnym forum, na którym jestem technicznym adminem. Zaproszenie otrzymał i kilka minut później przekazał mi tekst błędu występującego na nim. I tutaj zaczyna się sens mojego wpisu…

Błąd jest standardowym bugiem występującym w phpBB by Przemo w wersji 1.12.5. Polega on na tym, że w wypadku przekazywania parametru mode w pliku memberlist.php w postaci tablicy otrzymujemy błąd argumentu funkcji htmlspecialchars w stylu:

Warning: htmlspecialchars() expects parameter 1 to be string, array given in /home/adres

Dzieje się tak z prostego powodu. Funkcja powyższa w podstawowej formie przyjmuje jeden parametr, który musi być string-iem. W wypadku kiedy chcielibyśmy przekazać tablicę musielibyśmy każdy z jej elementów np. poprzez wpuszczenie w pętlę przefiltrować. Skrypt, a dokładniej jego autorzy nie przewidzieli takiej opcji.

D3d!k dał mi też pewien rodzaj zabezpieczenia. Nie wdając się w dyskusję na temat jego formy, powiem tylko, że nie było one prawidłowe. Pozbawiało skrypt w tym elemencie jakiegokolwiek zabezpieczenia.

Moja propozycja jest następująca. A mianowicie, należy znaleźć w pliku memberlist.php:

if ( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
{
	$mode = ( isset($HTTP_POST_VARS['mode']) ) ? htmlspecialchars($HTTP_POST_VARS['mode']) : htmlspecialchars($HTTP_GET_VARS['mode']);
}
else
{
	$mode = 'joined';
}

Po czym zamienić na:

if ( (isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode'])) && ( is_array($HTTP_POST_VARS['mode']) || is_array($HTTP_GET_VARS['mode']) ) )
{
	$mode = 'joined';
}
else if ( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
{
	$mode = ( isset($HTTP_POST_VARS['mode']) ) ? htmlspecialchars($HTTP_POST_VARS['mode']) : htmlspecialchars($HTTP_GET_VARS['mode']);
}
else
{
	$mode = 'joined';
}

Doszedł jak widać jeden warunek. Sprawdza on czy został ustawiony parametr mode jednej z tablic superglobalnych $_POST lub $_GET po czym dodatkowo sprawdza czy którakolwiek z nich jest tablicą. Jeśli tak to ustawia $mode na standardową opcję. Jeśli nie, tzn. że przekazywana nie jest tablica i dalej sprawdza już wg. starej instrukcji.

Podziękowania dla d3d!ka za ukazanie błędu.

Także z tego miejsca chciałbym Wam życzyć Wesołych Świąt, hucznego Sylwestra, a także pomyślności w nowym – już 2008 roku. A powyżej macie drobny prezent.


1 komentarz

Dodaj własny komentarz

Możesz użyć następujących tagów XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>