Mam witrynę w php, która ma include(), aby osadzić zawartość w szablonie. Strona do załadowania podana jest w parametrze get, dodaję ".php" na końcu parametru i dołączam tę stronę. Muszę wykonać pewne sprawdzenie bezpieczeństwa, aby uniknąć XSS lub innych rzeczy (nie wtrysku mysql, ponieważ nie mamy bazy danych). Oto, co wymyśliłem.
$page = $_GET['page'];
if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
!strpos($page, '\\') || !strpos($page, '..')) {
//append ".php" to $page and include the page
Czy jest coś, co mogę zrobić, aby dodatkowo oczyścić mój wkład?
Nie sprawdzaj wyniku strpos() w ten sposób - zwróci zero, jeśli dopasowanie jest na początku ciągu znaków, co zostanie ocenione jako fałszywe –
@Tom, rozwiązanie acceppted pozwala Ja też tego unikam, w każdym razie dzięki, zapamiętam twoją radę na przyszły kod. –
Zobacz też: http://stackoverflow.com/a/15825812/59087 –