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

Форум PHP

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

 

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

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

тема: Защита информации.
 
 автор: Sfinks   (17.01.2005 в 14:44)   письмо автору
 
 

Здравствуйте =))

В теме "Как настроить права доступа" была фраза...
"Если используется файловые варианты Web-приложений, файлы в которых редактируются по FTP, то через Web максимум что можно сделать это утащить сами служебные файлы"...

А если у меня файловый вариант, но используются не текстовые файлы, а php файлы, в которых все данные в виде массивов, доступ я к ним получаю через include(), а при редактировании переписываю весь файл, вместе с синтаксисом php.....
Ясно, что через WEB, доступа к их содержимому не получишь (или я лшибаюсь?), а вот как мне ограничить к ним доступ (предполагается, что "вредитель" как-то узнал имя файлов) скриптам, ну например которые запускаются не из етой же папки или папки на уровень выше. Установка прав, типа 0700 не подойдет - мои выполняются как noname. По большей части меня волнует их перезапись. Чтение не принцмпиально. Или можно как-то изменить, от какого имени исполняются мои скрипты на админа или группу?

   
 
 автор: cheops   (17.01.2005 в 15:44)   письмо автору
 
   для: Sfinks   (17.01.2005 в 14:44)
 

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

   
 
 автор: Sfinks   (17.01.2005 в 16:31)   письмо автору
 
   для: cheops   (17.01.2005 в 15:44)
 

Имеется ввиду, если злоумышленик, с того же хостинга откроет файл на запись с абсолютным путем, типа....
<?php
  $f 
fopen("/home/.....путь к моим папкам..../имя_файла""w");
  
fclose($f);
?>

Или он таким образом доступа не получит?

Тогда такой вариант хранения информации безопасен, и мне ничего не грозит при любых раскладах? ВЕРНО?

   
 
 автор: cheops   (17.01.2005 в 17:10)   письмо автору
 
   для: Sfinks   (17.01.2005 в 16:31)
 

Для директории где хранится ваш виртуальный хост скорее выставлены права доступа 0700, т.е. никто кроме вас туда попасть не может, вы также можете пометить файлы только для чтения 0444 - тогда их никто не сможет переписать...

   
 
 автор: Sfinks   (17.01.2005 в 20:43)   письмо автору
 
   для: cheops   (17.01.2005 в 17:10)
 

В FTP мой хост выглядит так:
docs - 0755
incs - 0755
logs - 0755
tmp - 0777

Значит ли ето, что перезаписывать файлы, находящиеся в папке docs не может никто, кроме скриптов, находящихся непосредственно в папке docs, даже если у етих файлов права стоят 0666?

А как у самой папки виртуального хоста могут быть права 0700, ести в папку tmp могут писать все кому не лень?

А установить права 0444 я не могу, т.к. мне самому нужно переписывать ети файлы, а т.к. мои скрипты noname, то мне подходит только 0666.

   
 
 автор: cheops   (17.01.2005 в 20:55)   письмо автору
 
   для: Sfinks   (17.01.2005 в 20:43)
 

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

   
 
 автор: Sfinks   (17.01.2005 в 21:05)   письмо автору
 
   для: cheops   (17.01.2005 в 20:55)
 

Короче, в двух словах (вернее даже в одном=)) Всего вышеперечисленного достаточно, чтоб жить спокойно? =))

   
 
 автор: cheops   (17.01.2005 в 21:40)   письмо автору
 
   для: Sfinks   (17.01.2005 в 21:05)
 

Да. /*переживать по поводу сайтов вообще не надо - никакого здоровья не хватит :)))*/

   
 
 автор: Sfinks   (17.01.2005 в 23:10)   письмо автору
 
   для: cheops   (17.01.2005 в 20:55)
 

Вот никак я не могу полностью понять, на кого распространяются какие права, и как влияют права родительских папок...
Давайте на примере!
Предположим, имеется такая структура:
any_dir                                   // Права
   |
   |-----dir1                             // 777
   |      |----last_dir                   //     222
   |      |        |------last_file1.php  //         666
   |      |        '------last_file2.php  //         444
   |      |
   |      |----file1.php                  // 666
   |      '----file2.php                  // 444
   |
   |-----dir2                             // 444
   |      |----file3.php                  //     666
   |      '----file4.php                  //     444
   |
   '-----any_file.php

Здесь:
any_file.php может: прочитать и записать file1.php
                    только прочитать файлы file2.php, file3.php и file4.php
                    только записать last_file1.php
                    ничего не может сделать с last_file2.php

file1.php может: прочитать и записать - никого
                 только прочитать file2.php, file3.php и file4.php
                 только записать last_file1.php
                 ничего не может сделать с last_file2.php
file2.php может: прочитать и записать - file1.php
                 только прочитать file3.php и file4.php
                 только записать last_file1.php
                 ничего не может сделать с last_file2.php

file3.php может: прочитать и записать - file1.php
                 только прочитать file2.php, и file4.php
                 только записать last_file1.php
                 ничего не может сделать с last_file2.php
file4.php может: прочитать и записать - file1.php и file3.php
                 только прочитать file2.php
                 только записать last_file1.php
                 ничего не может сделать с last_file2.php

last_file1.php может: прочитать и записать - file1.php
                      только прочитать file2.php, file3.php, file4.php и last_file2.php
last_file2.php может: прочитать и записать - file1.php и last_file1.php
                      только прочитать file2.php, file3.php, file4.php

Я все верно понял, или где-то ошибся? =))

   
 
 автор: cheops   (17.01.2005 в 23:57)   письмо автору
 
   для: Sfinks   (17.01.2005 в 23:10)
 

Всё верно (но file1.php может записать в last_file1.php).

   
 
 автор: Sfinks   (18.01.2005 в 02:21)   письмо автору
 
   для: cheops   (17.01.2005 в 23:57)
 

А я и написал, что file1.php может только записать в файл last_file1.php, но не может его прочитать. =))

И последнее забыл уточнить... Допустим у any_dir права 000, а у any_file.php - 777, тогда любой файл, папки any_dir, а также под-папок, под-под-папок и т.д. может делать с any_file.php все что угодно, а все, что за пределами any_dir не может ничего. Так?

Да, и что для php значит "исполнение"? Обращение через http или что-то другое? Т.е. не очень понятно, в чем разница между 666 и 777....

И еще, почему когда у папки стоит 666, то fopen в ней ничего не создает, а когда 777 создает? fopen() что, перед созданием (прочтением) файла меняет текущую дирректорию на папку файла? Тогда, вероятно, после fclose() php возвращается в папку, которая была перед fopen() ?

А почему, когда у файла права 644, rename() его без проблем переименовывает? Или rename() учитывает права папки, в которой лежит этот файл? Они стоят 777.

Ну и кажется последнее.... Если я входя на свой хостинг через FTP вижу 4 папки (docs; incs; logs и tmp), значит ли ето, что все они находятся в /home/...путь_к_моему_хосту.../ или возможно, что docs находится в /home/...путь_к_моему_хосту.../, tmp в какой-то общей TEMP дирректории всего хостинга, а остальное где-то еще?

Ух, сколько вопросов! Аж сам не ожидал =)) Ответьте пожалуйста на все =))

   
 
 автор: cheops   (18.01.2005 в 03:10)   письмо автору
 
   для: Sfinks   (18.01.2005 в 02:21)
 

>И последнее забыл уточнить... Допустим у any_dir права 000,
>а у any_file.php - 777, тогда любой файл, папки any_dir, а
>также под-папок, под-под-папок и т.д. может делать с
>any_file.php все что угодно, а все, что за пределами any_dir
>не может ничего. Так?
Да, если обращение идёт по относительному, а не по абсолютному пути.

>Да, и что для php значит исполнение? Обращение
>через http или что-то другое? Т.е. не очень понятно, в чем
>разница между 666 и 777....
В Windows исполняемые файлы помечаются специальным расширением, *.exe, в UNIX - битом исполнения (1: 7 = 4 + 2 + 1), причём файл можно назначить исполняемым для владельца, но не исполняемым для всех остальных - удобно. Для директорий бит исполения означает возможность получения списка директории при помощи команды ls или других средств. Т.е. при 666 находясь на сервере вы можете писать в директорию и читать из неё файлы, но зайти в неё не можете. Это всё не актуально при удалённом администрировании машины - вы же арендуете на хостинге часть сервера и работаете удалённо через сервера (FTP, HTTP), так как эти сервера организуют свой собственный доступ к файловой системе...

>И еще, почему когда у папки стоит 666, то fopen в ней ничего
>не создает, а когда 777 создает? fopen() что, перед
>созданием (прочтением) файла меняет текущую дирректорию на
>папку файла?
Вообще так не должно быть.

>А почему, когда у файла права 644, rename() его без проблем
>переименовывает? Или rename() учитывает права папки, в
>которой лежит этот файл? Они стоят 777.
Чёрт его знает, может и ошибка в PHP, может ещё чего... тут недавно обнаружилась дыра в защищённом режиме, уж про права доступа наверное вообще мало кто думает...

>Ну и кажется последнее.... Если я входя на свой хостинг
>через FTP вижу 4 папки (docs; incs; logs и tmp), значит ли
>ето, что все они находятся в /home/...путь_к_моему_хосту.../
>или возможно, что docs находится в
>/home/...путь_к_моему_хосту.../, tmp в какой-то общей TEMP
>дирректории всего хостинга, а остальное где-то еще?
Да это вполне может быть, но это можно узнать, проверив является ли директория ссылкой или настоящей директорией.

   
 
 автор: Sfinks   (18.01.2005 в 04:50)   письмо автору
 
   для: cheops   (18.01.2005 в 03:10)
 

Как-то не получается закончить :-/

>Да, если обращение идёт по относительному, а не по
>абсолютному пути.
Это вы наверно имели ввиду выход за пределы защищенной дирректории? Т.е. даже ссылкой
include(../any_file.php);
из file1.php доступ будет, а если написать
include(../../any_dir/any_file.php);
то доступа уже не будет! Верно?

>В Windows исполняемые файлы .....
Это я все читал. я не это имел ввиду, а "что подразумевается под термином - исполняемый"?
В Windows исполняемый файл это ехе, а его исполнение - обработка машинного кода процессором! А что значит бит исполняемый для файла с расширением php? То, что WEB-сервер может взять его, обработать php-код и выдать пользователю HTML-результат, или что-то другое?!
Или, может, для php-файлов это вообще не актуально и на етот бит можно не обращать внимания, ведь права доступа не действуют на WEB-доступ?

>Это всё не актуально при удалённом администрировании
>машины
Еще как актуально! если я в FTP-менеджере снимаю с любой дирректории 7-ой бит, то не могу войти в ету дирректорию, пока не поставлю его обратно!

>Вообще так не должно быть.
Но так есть.... =((

>Чёрт его знает, может и ошибка в PHP, может ещё чего...
Причем не просто переименовывает, а перемещает в другую дирректорию!!! Правда у нее тоже права стоят 777.

>уж про права доступа наверное вообще мало кто думает...
Следует ли ето читать, как "Права доступа - это полная чушь!" ???

>это можно узнать, проверив является ли директория
>ссылкой или настоящей директорией.
А как это проверить?

Бррр.... Мрак! Чем дальше в лес, тем гуще сосны =((

   
 
 автор: cheops   (18.01.2005 в 14:13)   письмо автору
 
   для: Sfinks   (18.01.2005 в 04:50)
 

1) Я имел ввиду что можно обращаться как по относительному пути ../any_file.php, так и по абосолютному /path/to/file/any_file.php - если при обращении по абослютному пути встретися директорию, с ограниченными правами доступа - то может не получить доступ.

2) Исполняемый бит для файлов это вот что - есть допустим программа на сервере, написанная на С (пусть Web-сервер Apache) или на скриптовом языке (пусть на Perl, PHP) - запустить её на исполнение операционной системой можно только в том случае, если файл имеет бит исполнения (1). Это не имеет значение, когда файл интерпретируется другой программой (Apache или php-интерпретаром запущенным как CGI), но имеет значение для запуска CGI-программ и запуска скриптов в указанное время демоном cron.

3) Права доступа не имеют значения, если сервер получивший доступ к директориям "неправильно" интерпретирует их удалённому пользователю, например Web-сервер, в которому и не нужно следить за правами доступа (главное, чтобы он имел доступ к файлам). Например FTP-сервера корректно передают права доступа. О доступе PHP к директориям заботится операционная система - здесь имеет значение с какими правами работает PHP, но я так полагаю это права nobody, попробуйте полностью закрыть директорию - и поработать с ней из PHP - если получится, то это может означать, что PHP работает с правами root - об этом уже имеет смысл сообщить хостеру, так как это смахивает на дыру - пусть он хотя бы прокомментирует...

4) Каким FTP-менеджером вы пользуетесь и отображает ли он права доступа в виде: drwxr-xr-x? Первая буква означает тип файла, - файл, d директория, l - ссылка.

   
 
 автор: Sfinks   (18.01.2005 в 18:26)   письмо автору
 
   для: cheops   (18.01.2005 в 14:13)
 

>попробуйте полностью закрыть директорию - и поработать с ней из PHP.....
Мы снова не поняли друг друга....
С папками он работает корректно, а вопрос вызвало то, что функция rename() без проблем делает все че хочет с файлами с правами 644, но в дирректории с правами 777. Вот я и подумал, что rename() при выполнении учитывает не права файла, с которым каботает, а права дирректории в которой находится етот файл.

Но я все же поигрался еще с созданием, сменой прав и переименованием, и обнаружил ВАЩЕ ОЧЕНЬ ИНТЕРЕСНУЮ ШТУКУ......

Они сделали так, что за все, что создано по FTP отвечает FTP, а за все, что сделано из PHP отвечает PHP!!! Т.е. если я скопировал на хост файл по FTP, то даже chmod() могу менять только по FTP, а PHP выдает ошибку. Но если я создал файл из скрипта, то FTP при попытке смены прав говорит, что етот сервер не поддерживает chmod, а из скрипта chmod без проблем меняется!!!

Считаю ето очень надежным решением, а вопрос теперь такой:
Это нормальное явление, или ето етот конкретный хостер так мощно все продумал и защитился? Просто я нигде (на форуме) никаких упоминаний о подобном спрособе установки прав не читал.....

   
 
 автор: cheops   (18.01.2005 в 19:02)   письмо автору
 
   для: Sfinks   (18.01.2005 в 18:26)
 

/* Хм... вот так вот хакеры и рождаются... */
А ну тогда всё нормально, содержимое файла действительно не меняется - всё укладывается в UNIX-картину мира.
По второму нужно учитывать, что FTP и PHP работают с правами разных владельцев и разных групп, поэтому права доступа для них вроде должны быть разными...

PS определить владельца файла можно при помощи функции chown().

   
 
 автор: Akira   (18.01.2005 в 19:29)   письмо автору
 
   для: cheops   (18.01.2005 в 19:02)
 

>/* Хм... вот так вот хакеры и рождаются... */
Так рождаються скрипт кидди =)

   
 
 автор: Sfinks   (18.01.2005 в 20:36)   письмо автору
 
   для: Akira   (18.01.2005 в 19:29)
 

>/* Хм... вот так вот хакеры и рождаются... */
Эт Вы про то, что я так до етих прав докапался? =))
Да позновато в 24 рождаться уже =))

>Так рождаються скрипт кидди =)
А ето кто еще такие =)) первый раз слышу =))

   
 
 автор: cheops   (18.01.2005 в 21:05)   письмо автору
 
   для: Sfinks   (18.01.2005 в 20:36)
 

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

   
 
 автор: Akira   (18.01.2005 в 21:06)   письмо автору
 
   для: Sfinks   (18.01.2005 в 20:36)
 

мда в 24 уже на покой пора =Р

   
 
 автор: Sfinks   (18.01.2005 в 22:02)   письмо автору
 
   для: Akira   (18.01.2005 в 21:06)
 

Бе бе бе :-PbPb =)))

Лана, кажись тема кончилась (пока что=))
Начинаем следующую.....

   
 
 автор: morf   (18.01.2005 в 23:14)   письмо автору
 
   для: Sfinks   (18.01.2005 в 22:02)
 

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

   
 
 автор: Akira   (18.01.2005 в 23:19)   письмо автору
 
   для: morf   (18.01.2005 в 23:14)
 

Это надо в JavaScript.
Где-то я читал про это.
Только эта защита на "дураков" и легко обходиться.
Bob в разделе JavaScript на
http://script.woweb.ru/

   
 
 автор: morf   (18.01.2005 в 23:26)   письмо автору
 
   для: Akira   (18.01.2005 в 23:19)
 

у меня некачаються скрипты с этого сайта уже гжето год.
http://script.woweb.ru/

   
 
 автор: Akira   (19.01.2005 в 00:18)   письмо автору
 
   для: morf   (18.01.2005 в 23:26)
 

Смотря чем качать ;) У меня все ок было.

   
 
 автор: hate   (22.07.2005 в 14:31)   письмо автору
 
   для: Sfinks   (17.01.2005 в 14:44)
 

С файлами вроде разобрался..
А вот с папками...
Во код:
    
for ($i..... ......
   if(!file_exists("kontent/articles/$id")) mkdir ("kontent/articles/$id",0777);
   if (move_uploaded_file($_FILES['img']['tmp_name'][$i],"l/kontent/articles/$id/$image"))
       print"Скопированно $image<br>"; 
   else print"Не могу скопировать $image<br>";

папка, которая создаётся делается 0755 (???!!)

пишет
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 32399 is not allowed to access /home/.../.../.../kontent/articles/5 owned by uid 99 in /home/.../.../.../my_script.php on line 108

Почему Разный UID? Скрипт то один и тотже...

   
 
 автор: cheops   (22.07.2005 в 14:43)   письмо автору
 
   для: hate   (22.07.2005 в 14:31)
 

uid 32399 относится к файлу, а uid 99 к пользователю.

   
 
 автор: hate   (22.07.2005 в 21:36)   письмо автору
 
   для: cheops   (22.07.2005 в 14:43)
 

А почему папка создаётся с разрешением 755 ?

А что тогда делать?

   
 
 автор: cheops   (22.07.2005 в 22:57)   письмо автору
 
   для: hate   (22.07.2005 в 21:36)
 

Может на хосте ограничения стоят - попробуйте спросить в тех.поддержке хостера...

   
Rambler's Top100
вверх

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