Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подключение разных модулей, альтернатива switch case 
:(
    Опции темы
Pitlord
Дата 8.11.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: 4
Всего: 7



g27, если $module никак не проверяется, то Вас могут взломать
PM MAIL   Вверх
bugsb
Дата 8.11.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



как вам вот такой код

Код

$include = @include "modules/" . $module . "/index.php";
if($include == FALSE) header("Location: /404");


если $module никак не проверяется, то как могут взломать в данном случае? ведь хоть что прописывай, все равно условие будет либо true либо false и левая переменная явно будет false и перекинет на 404
PM MAIL   Вверх
Ипатьев
Дата 8.11.2009, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



а при чем здесь условие-то вообще?
речь о том, что подставят вместо модуля что-нибудь.
другое дело, что вряд ли какой-нибудь index.php может представлять интерес для взлома.

и никогда не делай так - @include
чтобы проверить, существует ли файл на диске, есть функции. is_readable() например

PM MAIL   Вверх
bugsb
Дата 8.11.2009, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



это код не мой, но мне он показался правильным

Цитата

речь о том, что подставят вместо модуля что-нибудь.

пример можно этого чего-нибудь?

Цитата

и никогда не делай так - @include

почему? часто вижу такое в разных скриптах

Цитата

а при чем здесь условие-то вообще?

Код

$module = $_GET['module'];
$file = "modules/" . $module . "/index.php";
if (is_readable($file)) 
        include($file); 
else 
        header("Location: /404");

если в папке modules не оказалось папки равной значению переменной $module, то переменная $module больше никуда и не идет. Поэтому я и сделал вывод, что хоть что пиши в переменную $module все равно ничего страшного не будет
PM MAIL   Вверх
Ипатьев
Дата 8.11.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Что значит "больше никуда не идет"? 
А куда она вообще может пойти? Даже если никакой проверки не будет?

Цитата(bugsb @  8.11.2009,  20:50 Найти цитируемый пост)
часто вижу такое в разных скриптах

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

Оператор @ подавляет сообщение об ошибке. Чего делать нельзя ни в коем случае.

Добавлено через 49 секунд
да, и еще. по поводу "никуда не идет"
Цитата(bugsb @  8.11.2009,  20:50 Найти цитируемый пост)
 header("Location: /404");

я так понимаю, что вы наивно полагаете, будто эта конструкция прекращает работу скрипта?

PM MAIL   Вверх
nerezus
Дата 8.11.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

почему? часто вижу такое в разных скриптах
 потому что эти скрипты писали идиоты, не знающие php.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
g27
Дата 8.11.2009, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 29.9.2007
Где: Vilnius

Репутация: нет
Всего: нет



Код

 if(file_exists("./modules/".$module.".module.php")) {
 require ("./modules/".$module.".module.php");
 }

непонимаю что тут у меня плохо. 
PM MAIL Skype   Вверх
bugsb
Дата 8.11.2009, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



Цитата

А куда она вообще может пойти? Даже если никакой проверки не будет?

например в базу данных если бы я ее вписывал или выводил на сайт.

Цитата

учиться надо у тех, кто понимает, что делает.

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

Цитата

Оператор @ подавляет сообщение об ошибке. Чего делать нельзя ни в коем случае.

почему нельзя? я как администратор должен видеть ошибки, а пользователям то зачем их показывать? где то читал что mysql_error() нивкоем случае нельзя показывать пользователям, а использовать только при разработке и отладке скрипта.

Цитата

я так понимаю, что вы наивно полагаете, будто эта конструкция прекращает работу скрипта?

не знаю, а разве нет? ну даже если и нет, то после этого у меня идет простой вывод шаблонов.

вы так и не привели пример что можно передать в переменную $module чтобы взломать сайт, ну или хотя бы как-нибудь заставить понервничать админа.


PM MAIL   Вверх
Ипатьев
Дата 8.11.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(bugsb @  8.11.2009,  21:59 Найти цитируемый пост)
почему нельзя? я как администратор должен видеть ошибки, а пользователям то зачем их показывать?

вот это правильно.

но собака подавляет ошибки для всех. именно поэтому ее не надо использовать.
тем более, что в данном контексте она совсем не для скрытия ошибки от пользователя поставлена.

За показ ошибок в браузер отвечает специальная настройка. она так и называется, display_errors
Именно ее и надо использовать. 

Цитата(bugsb @  8.11.2009,  21:59 Найти цитируемый пост)
где то читал что mysql_error() ни в коем случае нельзя показывать пользователям, а использовать только при разработке и отладке скрипта.

вот видите, вы даже правильную мысль читаете, но неправильно ее понимаете smile
показывать нельзя - это правильно.
но использовать - обязательно! На работающем сайте она даже важнее, чем при разработке.
просто в браузер ее выводить не надо всем пользователям. а только админу.
и обязательно записывать в лог

Цитата(bugsb @  8.11.2009,  21:59 Найти цитируемый пост)
а как узнать того кто понимает что делает? по книгам? 

книги тоже разные бывают.
вот теперь вы знаете, что если встретите в книге собаку, то эта книга плохая smile

Цитата(bugsb @  8.11.2009,  21:59 Найти цитируемый пост)
не знаю, а разве нет? 

ну разумеется, нет. С каких это пор выдача заголовка в браузер прерывает работу скрипта?
поэтому если этот заголовок - Location, то после него в обязательном порядке всегда надо писать следующей стрjкой exit;

Цитата(bugsb @  8.11.2009,  21:59 Найти цитируемый пост)

вы так и не привели пример 

А это, собственно, и не я был, кто писал, что взломают smile
Я написал, что вряд ли.
Но суть в том, что вообще-то, $module может указывать на любую папку на диске.

PM MAIL   Вверх
Pitlord
Дата 8.11.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: 4
Всего: 7



Цитата(bugsb @  8.11.2009,  20:12 Найти цитируемый пост)
если $module никак не проверяется, то как могут взломать в данном случае?


Вот Ваш код:
Код

$module = $_GET['module'];
$file = "modules/" . $module . "/index.php";
if (is_readable($file)) 
        include($file); 
else 
        header("Location: /404");


Запрос файла http://example.com/index.php?module=../upl...ser_file.txt%00

Позволит приинклудить файл пользователя, если, конечно, такое позволяет сайт (например, аттачмент текстового файла на форуме).

P.S. Правда атака расчитана на то, что magic_quotes_gpc = off

Это сообщение отредактировал(а) Pitlord - 8.11.2009, 22:53
PM MAIL   Вверх
nerezus
Дата 8.11.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

а как узнать того кто понимает что делает? по книгам? книги так же тупо перепечатывают все кому не лень, английский язык я к сожалению плохо знаю чтоб читать зарубежных авторов
 Про большинство авторов ты прав. Они не знают PHP.
Но самые лучшие книги переведены.
Гутманс, Шлоснейгл. 2 книги этих авторов. Остальные переведенные книги по PHP не читай - не пригодятся.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ипатьев
Дата 8.11.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Pitlord, у меня не воспроизводится

PM MAIL   Вверх
Pitlord
Дата 8.11.2009, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 31.10.2009

Репутация: 4
Всего: 7



Ипатьев, вот такой код запустите:

Код

<?php
// Имя существующего файла
$filename = 'file.php';

include("{$filename}\0/index.php");
?>


Приинклудился ли file.php?
PM MAIL   Вверх
Ипатьев
Дата 8.11.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



да я тупанул, с файлом не проверил
почему-то я думал, что это дело давно пофиксили


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.