Проблема в том, что вы используете method="post"
в теге формы и пытаетесь получить данные из $_GET
.
Когда method = "post"
значения формы доступны через $_POST['fieldname']
или $_REQUEST['fieldname']
(который содержит значения POST и GET). Вы также можете изменить method
формы на GET
Однако самая большая проблема, которую я вижу, это ..
include($folder.$app.".php");
Это страшно, особенно если вы используете register_globals
(это единственное место, из которого $app
может прийти в коде, который вы разместили)
Скажите, $_GET['app']
установлен в ..
../../something/else.php
.. вы бы включили ..
$_GET['t'] . "../../something/else.php"
Если у вас есть для динамического включения файлов на основе пользовательского ввода, вычеркивания всех не алфавитно-цифровых символов и наличия белого списка допустимых файлов - что-то вроде следующего:
$valid_files = array("General", "Todo");
$safe_filename = preg_replace("/[^a-zA-Z0-9]/", "", $_REQEST["app"]);
if(in_array($safe_filename, $valid_files)){
include("apps/" . $safe_filename . ".php");
}
Существуют и другие способы маршрутизации, например, header("location: ...")
:
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: ' . $new_location);
Конечно, вам нужно безопасно санировать $new_location
, но у него меньше проблем, чем при использовании include()
(поскольку он не выполняет динамически произвольные сценарии на вашем сервере)
В основном скрипт будет делать что-то вроде:
$safe_filename = preg_replace("/[^a-zA-Z0-9]/", "", $_REQUEST["app"]);
$new_location = "/apps/" . $safe_filename . ".php"; // construct new URL
// If it's valid, redirect, if not, return error 404
if(in_array($safe_filename, $valid_destinations)){
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: ' . $new_location);
} else {
header("HTTP/1.0 404 Not Found");
}