вывод текста из *.php в index.php через ссылки

Статус
В этой теме нельзя размещать новые ответы.

vave

Полезный
Регистрация
22 Июн 2007
Сообщения
466
Реакции
16
я всегда пользовался устарелым методом
<?php
if ($menu <>"") {
include ("$menu.php");
}
else
{
include ("home.php");
}


?>

запрос выглядит как "?menu="
но последнее время замечаю что сервера стали отключать функцию Register Global Variables, и как должен выглядеть новый код для совершения такого-же действия?
 
если я правильно все понял, примерно так:

Код:
<?php
if ($_GET['menu'] <>"") {
include ($_GET['menu'].".php");
}
else
{
include ("home.php");
}

?>
 
юзай глобальные массивы $_GET или $_POST, а лучше конечно $_REQUEST - так надёжнее )
 
немного не в тему, но позволю себе добавить, что категорически не рекомендуется передавать имена скриптов для incude через запрос, особенно через URL
это опасно, т.к. может привести к выполнению стронннего кода на вашем сервере
 
  • Заблокирован
  • #5
немного не в тему, но позволю себе добавить, что категорически не рекомендуется передавать имена скриптов для incude через запрос, особенно через URL
это опасно, т.к. может привести к включению и выполнению стронннего кода на вашем сервере

если грамотно фильтровать то опасаться нечего
 
если грамотно фильтровать то опасаться нечего

И где в коде
PHP:
<?php
if ($_GET['menu'] <>"") {
include ($_GET['menu'].".php");
}
else
{
include ("home.php");
}
Фильтрация? Если так делать, то более безопасно делать включение файла примерно так
PHP:
$file = "{$_GET['menu']}.{$random_postfix}.php";
if(strpos(dirname($file), $_SERVER['DOCUMENT_ROOT']) !== false) {
 include $file;
}
Но такой код лишь частично защитит от атак. Т.е. он не защитит от включения чужого файлега внутри вашей директории, если атакующему известна переменная ;$random_postfix. А лучше сделать включение такой шняги через switch/case/default - конструкцию. :)
 
PHP:
$allowed_menu=array('menu', 'shmenu', 'huemenu');
if (array_search($_GET['menu'], $allowed_menu)!==false) {
	require_once($_GET['menu'].".php");
}
 
Ну раз пошла такая пьянка то вот:
PHP:
<?php
    define('DOCROOT', dirname(__FILE__).'/');
    if (!empty($_GET['menu']) && strpos(DOCROOT.$_GET['menu'].'.php', '/../')===false && is_file(DOCROOT.$_GET['menu'].'.php'))
    {
        include (DOCROOT.$_GET['menu'].'.php');
    }
    else
    {
        include (DOCROOT.'main.php');
    }
?>
 
ну в помощь вам мод реврайт, а еще навернуть так вот он мой защитный модуль, инклудим в начале странички и потом любую переменную transform_HTML(строка, длина строки) // чтобы не переполнить буфер обмена, ато есть умельцы и так ламают, защита от ява ксс атак, инджект атак скл, чтобы не дропнули табличку)) и т.д

<?php
function transform_HTML($string, $length= null)
{
$string = trim($string);
$string = iconv("cp1251","UTF-8",$string);

//mb_convert_encoding

$string = htmlentities($string, ENT_NOQUOTES,"UTF-8");

$string= str_replace("#", "#", $string);
$string= str_replace("%", "%", $string);
$length = intval($length);

if ($length>200){
$string=substr($string,0,200);
}

$string = iconv("UTF-8","cp1251",$string);
return $string;

}

?>

не забываем говорить спасибо)) еесли появяться вопросы пишите в личку! отвечу как будет время :thenks:
 
maxfighton,
странный код
1. зачем 2 раза конвертировать сначало в utf-8 , а затем обратно?
2. почему проверка "на переполнение буффера" стоит после конвертации и htmlentities?
т.е. сначала конвертируем 100 Мб текст, а потом его выкидываем c помощью substr, неэффектифвно ...
А если уязвимы именно эти функции?
да кстати вот
3. сама обрезка строки может быть сокращена до одной строки
$string=substr($string,0,200); и все , зачем if?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху