Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Хочу знать кто меня инклудит
 
 автор: Eugene77   (13.10.2007 в 19:18)   письмо автору
 
 

Первый файл инклудит второй, второй инклудит третий.
Вопрос:
Может ли третий файл узнать имя второго, и записать его в базу?

   
 
 автор: sim5   (13.10.2007 в 19:22)   письмо автору
 
   для: Eugene77   (13.10.2007 в 19:18)
 

Конечно, вы же пишите кто там че инкулудит, сразу без вопросов запишите его в базу.

   
 
 автор: Eugene77   (13.10.2007 в 21:36)   письмо автору
 
   для: sim5   (13.10.2007 в 19:22)
 

>Конечно, вы же пишите кто там че инкулудит, сразу без вопросов запишите его в базу.

Нет. Это вопрос по безопасности скрипта.
Я хочу, чтобы 3-й инклуд проверял, не инклудит ли его какой-нибудь левый скрипт.
3-й инклуд у меня конфиг базы.

   
 
 автор: sim5   (13.10.2007 в 21:42)   письмо автору
 
   для: Eugene77   (13.10.2007 в 21:36)
 

Проверять событие onInclude у третьего файла :)) Интересная идея, если бы при подключении подключаемому файлу передавалось что-то, а так как это?

   
 
 автор: Unkind   (13.10.2007 в 22:07)   письмо автору
 
   для: Eugene77   (13.10.2007 в 21:36)
 

>Нет. Это вопрос по безопасности скрипта.
> Я хочу, чтобы 3-й инклуд проверял, не инклудит ли его какой-нибудь левый скрипт.
> 3-й инклуд у меня конфиг базы.


Если есть возможность выполнять на удаленном хосте произвольный PHP-код, то никакой include и не потребуется. Легче прочитать как текстовый файл Ваш config и всё.
Так что сами себе жизнь усложняете.

   
 
 автор: Eugene77   (14.10.2007 в 17:58)   письмо автору
 
   для: Unkind   (13.10.2007 в 22:07)
 

>
>Если есть возможность выполнять на удаленном хосте произвольный PHP-код, то никакой include и не потребуется. Легче прочитать как текстовый файл Ваш config и всё.
>Так что сами себе жизнь усложняете.

Разумно, но у меня в конфиге пароль базы не прямым текстом прописан и без исполнения конфига базу довольно трудно вскрыть. А способ, которым пароль из конфига получается -
это моя собственная разработка. Его в пять минут не подделаешь.

   
 
 автор: mihdan   (14.10.2007 в 18:13)   письмо автору
 
   для: Eugene77   (14.10.2007 в 17:58)
 

Через константы ! Во втором файле определите константу например так:


<?php
define
('SECOND'basename(__FILE__));
?>


В третьем проверим есть ли константа и равна ли она имени файла что нужен:


<?php
if (defined(SECOND)) {
    if (
SECOND == 'second.php') {
          echo 
'Vsyo ok';
    } else {
          die(
'Hacker');
    }
} else {
    die(
'Hacker');
}
?>

   
 
 автор: Eugene77   (15.10.2007 в 16:57)   письмо автору
 
   для: mihdan   (14.10.2007 в 18:13)
 

Совет хорош, но мне не подходит.
Такие же константы может определить и атакующий скрипт.
Хотелось бы выяснить его истинное имя и местоположение.

To Unkind: Добавка всей этой криптографии увеличивает время подключения конфига
примерно в два раза. В целом скрипт выполняется на 10-20 процентов медленней.
Не вижу повода для беспокойства по этому поводу.
Может я и не прав?

   
 
 автор: Ralph   (15.10.2007 в 19:43)   письмо автору
 
   для: Eugene77   (15.10.2007 в 16:57)
 

Вопрос в том,где находится "атакующий скрипт"... Если не на вашем сервере,то вариант с константами -то,что вам нужно,если же на вашем сервере-ему не надо и инклюдить ваш конфиг,он спокойно прочитает весь его код и передаст его "кому нужно"

   
 
 автор: Unkind   (16.10.2007 в 14:33)   письмо автору
 
   для: Ralph   (15.10.2007 в 19:43)
 

> Если не на вашем сервере,то вариант с константами -то,что вам нужно
Без этого сомнительного трюка можно будет узнать пароль, хотите сказать?

> Может я и не прав?
В чем именно? В том, что Вы думаете, если в своём же скрипте так запутаете взломщика, что он не получить пароль, имея доступ к содержимому этих файлов, то Вы не правы.
А насчет того стоит ли беспокоится о времени выполнения ненужных блоков кода - не знаю. Дело Ваше. :)

   
 
 автор: Ralph   (16.10.2007 в 23:04)   письмо автору
 
   для: Unkind   (16.10.2007 в 14:33)
 

Та да,вы правы,вот что значит-долго не спать... Утром как прочел написанное мной... (confused)

   
 
 автор: Eugene77   (16.10.2007 в 17:30)   письмо автору
 
   для: Ralph   (15.10.2007 в 19:43)
 

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

Собственно мои "криптографические функции" достаточно просты, но сомнительно,
чтобы кто-либо сразу и безошибочно их обошёл. Гарантирую, что будет одна, а скорее всего
пяток ошибочек в начале.
Сработает соответствующая функция - я узнаю, что кто-то у меня ковыряется,
поменяю пароль - и всё.

Можно я повторю вопрос?

Как узнать кто инклудит конфиг?

   
 
 автор: Unkind   (16.10.2007 в 17:58)   письмо автору
 
   для: Eugene77   (16.10.2007 в 17:30)
 

Ню-ню...

Собственно, узнать это и при этом нельзя было бы фальсифицировать информацию нельзя.

   
 
 автор: sim5   (16.10.2007 в 18:07)   письмо автору
 
   для: Eugene77   (16.10.2007 в 17:30)
 

Ну только если применить авиационный прием. На самолетах ставят два типа ответчика - для ICAO, и свой/чужой для "своих". Установить ответчики в "своих" файлах, и если не поступит инклужиемому файлу ответ "я свой" от иклужиемого файла, сбивать их к чертовой матери. :)

   
 
 автор: Eugene77   (16.10.2007 в 20:24)   письмо автору
 
   для: sim5   (16.10.2007 в 18:07)
 

>Ну только если применить авиационный прием. На самолетах ставят два типа ответчика - для ICAO, и свой/чужой для "своих". Установить ответчики в "своих" файлах, и если не поступит инклужиемому файлу ответ "я свой" от иклужиемого файла, сбивать их к чертовой матери. :)

То есть опять всё сводится к предопределению неких констант.
Этот способ я знаю.
И, пожалуй, если ничего другого не придумать, придётся признать что Unkind прав.
Предопределённую константу трудно не заметить.
Это только от других типов уязвимости может быть эффективно, когда
нельзя прочитать сами файлы.

Спасибо всем за участие!

   
 
 автор: Unkind   (14.10.2007 в 18:34)   письмо автору
 
   для: Eugene77   (14.10.2007 в 17:58)
 

> Разумно, но у меня в конфиге пароль базы не прямым текстом прописан и без исполнения конфига базу довольно трудно вскрыть.

Тогда надо прочитать файл с функцией кодирования.
Вы, конечно, можете бесконечно усложнять жизнь взломщику, но в итоге просто получите большую нагрузку от крутых криптографических функций и не более. Если взломщик получил такую возможность, как выполнение произвольного кода - то его не остановят подобные подводные камни.

   
 
 автор: Евгений Петров   (16.10.2007 в 22:38)   письмо автору
 
   для: Eugene77   (13.10.2007 в 19:18)
 

array get_included_files ( void )
вам поможет

   
 
 автор: mihdan   (17.10.2007 в 10:46)   письмо автору
 
   для: Евгений Петров   (16.10.2007 в 22:38)
 

get_included_files()

   
 
 автор: Eugene77   (17.10.2007 в 14:48)   письмо автору
 
   для: mihdan   (17.10.2007 в 10:46)
 

>get_included_files()

Ура! Вот это ответ профессионала!
Я так и думал, что PHP продуманный язык и в нём есть всё необходимое для
организации замкнутой системы контроля целостности скриптов.
Только не мог понять с какой стороны они подошли.

Вот это не могу перевести:

Something that's not noted in the docs, if a file is included remotely and you do a get_included_files() in the include itself it will *not* return the document that included it.

Это удалённые файлы не будут включены или
цепочки включающих файлов не отслеживаются?

   
 
 автор: Unkind   (17.10.2007 в 16:31)   письмо автору
 
   для: Eugene77   (17.10.2007 в 14:48)
 

Да как же Вы не поймете :) Это всё бесполезно. Пароль всё равно будет в чистом виде передаваться функции mysql_connect(), какие бы козни Вы не строили. А это значит, что украсть пароль можно будет всегда при таких возможностях.

   
 
 автор: Eugene77   (17.10.2007 в 16:59)   письмо автору
 
   для: Unkind   (17.10.2007 в 16:31)
 

>Пароль всё равно будет в чистом виде передаваться функции mysql_connect(), какие бы козни Вы не строили. А это значит, что украсть пароль можно будет всегда при таких возможностях.

Как? Перехватить пароль?
Разве это возможно?
А отредактировать сонфиг так чтобы он открытым текстом напечатался - не получится.
Это можно ограничить.
Останется реальная возможность написать свой скрипт, который извлекает часть данных из
окружения, часть берёт из конфига, потом это всё аккуратно скрещивает и получает верный результат - да так возможно, но не с первой попытки.
Это как игра в шахматы.
Ни один програмист не пишет без ошибок.
На этом-то и поймается.
Понять даже простой криптографический скрипт без комментариев - это совсем не просто.

Жаль, что база не умеет фиксировать обращение к ней с неверным паролем!
Или может?
Наверно где-то в логах надо вылавливать.
Подскажете где?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования