INDEVELOPMENTbeta






Subskrybuj m1chu.eu – another devblog
 
  •  m1chu: Gdyby ktoś miał kiedyś problem z nieprawidłową wielkością pobieranego pliku, chociażby w moich, wyżej...
  •  m1chu: Jeżeli chodzi o szybką konwersję z Flash na HTML to szczerze nie wiem. Nigdy nie potrzebowałem żadnej...
  •  m1chu: @Michal: wrzuć linki w jakieś kontenery (listę ul -> li, dl -> dt/dd, czy chociażby w divy). Ustaw ich...
  •  Józek: Wszystko pięknie opisane, ja mam małe pytanko. Od jakiegoś czasu staram się dowiedzieć jak zmienić...
  •  Michal: a co jesli chciałbym umiescic kilka takich linkow obok siebie ?jesli zmienie wartość display na inline...
  •  mano: Co należy zrobić aby podmiane przycisku zastasowac kilka razy na stronie z różnymi grafikami ? Trzeba...
  •  michauu: Ale na twojej stronce nie ma nifty corners:) http://www.html.it/articoli/ni fty/index.html

Dołącz do fanów!

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>