XSS ve diğer saldırıları önlemek için $ _GET parametreleri sterilize

3 Cevap php

Ben bir şablon içine içeriği gömmek için () içermez php bir web sitesi var. Yüklemek için sayfa bir get parametresi verilir, ben parametrenin sonuna ". Php" eklemek ve o sayfayı içermektedir. Ben XSS ya da başka şeyler (biz bir veritabanı yok çünkü enjeksiyon mysql değil) önlemek için bazı güvenlik denetimini yapmak gerekir. Ne ile geldim şudur.

$page = $_GET['page'];

if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
    !strpos($page, '\\') || !strpos($page, '..')) {
        //append ".php" to $page and include the page

Ben furtherly benim girdiyi yapabileceği başka bir şey var mı?

3 Cevap

$page = preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['page']);

Muhtemelen bu sterilize etmek için en hızlı yoludur, bu bir şey almak ve sadece harf, sayı, alt çizgi veya tire içerdiğinden emin olun olacaktır.

Kaynak kodu var sayfaları açık bir listesini tanımlamak ve sonra girişini kontrol etmek için kullanabilirsiniz. Evet, daha fazla iş, ama izin ne çok net yapar ve ne değildir. Örneğin:

$AVAILABLE_PAGES = array('home', 'news',  ...);
$AVAILABLE_PAGES = array_fill_keys($AVAILABLE_PAGES, 1);

$page = $_GET['page'];
if (!$AVAILABLE_PAGES[$page]) {
   header("HTTP/1.0 404 Not Found");
   die('Page not found.');
}

include "pages/$page.php";

"Sterilize" yok - Atak verileri değil, kaynak kullanımına özgüdür. Yerine onları çıktı senin gibi değerleri Escape. What’s the best method for sanitizing user input with PHP? benim cevabım da bak