Безопасный include()

Archy

Новичок
Безопасный include()

Я извиняюсь, если нарушил какие либо правила своим вопросом или доставил неудобства администраторам или посетителям, но вопрос чрезвычайной вожности, а сам я еще зеленый кодер...

Имеется конструкция:
PHP:
<?php
...
if( $lang== "" ) {  $lang="gb"; }
if( $lang== "gb" ) {  $sprog="English Sitemap"; }
if( $lang== "es" ) {  $sprog="Mapa Web"; }
if( $lang== "de" ) {  $sprog="Deutch Ubersicht"; }
...
echo "
";
include ("$lang.txt");
echo "
...
?>
Банальный php-injection валит этот скрипт! Его нужно срочно по-умному оградить от проблемы. Конечно, почитав мануалов, я бы и сам закрыл баг, но проблема в том, что нужно сохранить структуру скрипта, то есть только лишь дополнить его, ну или изменить что-то по-минимуму... Возможно, я глупо выражаюсь. Сорри.

Обещаю научиться закрывать такие ошибки сам, если все подробно объясните :)

Люблю PHP!

Спасибо!
 

mani13

Новичок
Ты не проверяешь на значения, отличные от пустой строки, gb, es, de, естественно, плохие строки никак не фильтруются...
А так есть совет номер 1:
http://www.php.net/manual/en/control-structures.else.php
и
http://www.php.net/manual/en/control-structures.elseif.php

Совет номер 2 для данного случая:
http://www.php.net/manual/en/control-structures.switch.php

А так и рассказывать по сути нечего -- проверяйте всё, что приходит, экранируйте всё, что необходимо...

P.S.: вот и тема для короткой заметки :) Может, после вступительных сам чего-нибудь про это попишу... или подборочку материалов по теме...
 

fixxxer

К.О.
Партнер клуба
примерно так

$langs = array(
'gb' => 'English Sitemap',
//.......
);

$lang = issset($langs[$_GET['lang']]) ? $_GET['lang'] : 'gb';
$sprog = $langs[$lang];

ну ты понял, да?
 

Фанат

oncle terrible
Команда форума
Archy
ну ты же пишешьif( $lang== "gb" )!
то есть, туда всего-то нудно добавить и инициализацию $lang
но удобнее всего - так как fixxxer сказал
 

fixxxer

К.О.
Партнер клуба
а инициализацию у него не получится добавить просто так.
у него ж register globals = on :)
 

Archy

Новичок
mani13
fixxxer
Фанат
Вы клевые! Спасибо за reply! Попробую попробовать...
 
Сверху