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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файла на сервере 
:(
    Опции темы
Plavozont
Дата 21.7.2010, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Решил сделать настроичный файл в папке со своим сайтом, и хотелось бы чтобы только я мог его читать. (Читаю я его php скриптом.)
php код в настроичном файле заключённый в <? ?> не читается, и то что печатается этим кодом тоже не прочитать, так что защитить его содержимое проверкой сессии не получится. Да и редактировать такой файл будет нереально.
Простой текст в файле читается, но если этот файл открыть по url в браузере его тоже можно приспокойно прочитать.
Как сделать чтобы он доступен был только из php. (редактировать через php мне тоже его нужно.)
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
ksnk
Дата 21.7.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Plavozont, заведи дополнительную "папку со своим сайтом" выше каталога public_html (или www или как там на сервере?) тогда снаружи никто не сможет добраться до файла. только посредством php..


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Plavozont
Дата 21.7.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А если он будет в этой же папке то никак ?
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
IgorIV
Дата 21.7.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пример покажи, что у тебя не читается.
PM MAIL   Вверх
s0lman
Дата 21.7.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


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

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



Как вариант Deny from all ?


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
Muerto
Дата 21.7.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



СОхрани этот файл как .php и не выводи никаких данных, в чем проблема то?
А вставляй через include

Нужно редактировать через сайт? тогда опять же сохраняй как .php и инклудь

Это сообщение отредактировал(а) Muerto - 21.7.2010, 20:23


--------------------
user posted image
PM MAIL   Вверх
Plavozont
Дата 22.7.2010, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Смысл в том чтобы клиент не мог получить доступ к файлу на сервере, а php выполняемый на сервере мог брать файл на сервере и делать с ним что хочешь. Чтобы клиент не мог сним ничего сделать достаточно запретить публичному пользователю чтение запись и выполнение файла. Но тогда и php отказывается с ним что либо делать, но оно и понятно, так ведь кто угодно сможет написать свой php код и отредактировать мой файл. Тогда возникает желание запретить доступ к файлу неавторизованному пользователю, а мне разрешить, но как такое сделать ? Или может быть сделать как-то чтобы php который находится в этой же папке мог его редактировать а всякие левые - нет.

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

Цитата

Пример покажи, что у тебя не читается. 


textfile.txt:
Hello World

php:code
$fs=filesize('textfile.txt');
$handle=fopen('textfile.txt', 'r');
$contents = fread($handle, $fs);
fclose($handle);
print $contents; //Hello World
/----------------------------------------/

textfile.txt:
<?
print 'Hello World';
?>

php:code
$fs=filesize('textfile.txt');
$handle=fopen('textfile.txt', 'r');
$contents = fread($handle, $fs);
fclose($handle);
print $contents; //...Пусто

Цитата

Как вариант Deny from all ?


Вариант чудесный был бы если можно было из php этот динай отменить отредактировать файл и тут же назад установить. А просто разрешить какому-то одному IP доступ к файлу не пойдёт, сайт тиражируется и администраторы меняются...

Цитата

СОхрани этот файл как .php и не выводи никаких данных, в чем проблема то?
А вставляй через include

Нужно редактировать через сайт? тогда опять же сохраняй как .php и инклудь


Было бы чудесно но как отредактировать php который ты заинклудил ???
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
Just123
Дата 22.7.2010, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может быть поможет что-то вроде этого?

Код

if (!defined("GUARD")) die("Go away!");



P.S. Не правильно сначало понял, извиняюсь.

Это сообщение отредактировал(а) Just123 - 22.7.2010, 09:56
PM MAIL   Вверх
IgorIV
Дата 22.7.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Plavozont @  22.7.2010,  10:43 Найти цитируемый пост)
сайт тиражируется и администраторы меняются...

о ф и г е т ь .... 


Цитата(Plavozont @  22.7.2010,  10:43 Найти цитируемый пост)
Смысл в том чтобы клиент не мог получить доступ к файлу на сервере,

Клиент в смысле покупатель скрипта? Или клиент как посетитель?



Это сообщение отредактировал(а) IgorIV - 22.7.2010, 16:26
PM MAIL   Вверх
overmet
Дата 22.7.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

сайт тиражируется и администраторы меняются...

о ф и г е т ь .... 
 smile 
надо попробовать,
Код

db.linkfeed.ru/ыыы/ibigdanlove.tk/"любой текст"

а вдруг fread сработает, copy и curl не сработало smile 
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Plavozont
Дата 23.7.2010, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Клиент в смысле покупатель скрипта? Или клиент как посетитель?


Клиент как javascript, как web-браузер, как любая клиентская программа, чтобы к файлу пролезть можно было только со стороны сервера и никак иначе.
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
Noviy
Дата 23.7.2010, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По поводу javascript, можешь не переживать. Доступ к файлу блокирурй с помощью .htaccess, как подсказал s0lman.
PM MAIL ICQ   Вверх
bazzjr
Дата 23.7.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В таких случаях, когда меняются админы, создают в базе таблицу, в неё записывают IP админов и их права.

Далее определенный скрипт проверяет эти права админа, и перенаправляет на нужную страницу с нужными правами и возможностями.

Все эти проверки можно так же сделать с помощью mod_rewrite.
PM MAIL ICQ   Вверх
smartov
Дата 23.7.2010, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



Plavozont, у тебя какие-то непонятки. То ты говоришь что тебе надо запретить доступ с клиента. 
Тот ты говоришь
Цитата(Plavozont @  22.7.2010,  09:43 Найти цитируемый пост)
ведь кто угодно сможет написать свой php код и отредактировать мой файл

 И каким по-твоему образом его код попадёт к тебе на сервер?
Невозможно ответить на твой вопрос.

Запретить доступ к файлу можно многими способами, начиная от mod_rewrite и заканчивая игрой с правами на стороне сервера.
PM MAIL   Вверх
Plavozont
Дата 24.7.2010, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

И каким по-твоему образом его код попадёт к тебе на сервер?
...ведь кто угодно сможет написать свой php код

в смысле на своём сервере.
Цитата

...и отредактировать мой файл 

в смысле файл с настройками, на моём сервере.
Цитата

Запретить доступ к файлу можно многими способами


Оу, а можно как раз парочку таких примеров посмотреть, потому что я вапще в вопросах доступа не бум-бум, вот и полагаю наверно ошибочно что php-код на чьём-то сервере может что угодно сделать с файлом на моём сервере...

А вообще я делаю наверно глупость, но почему-то сделать её очень хочется. 
Я делаю приложение которое можно будет настраивать под разные задачи, типа CMS (Content Managment System). И идея такая что человек записывает к себе на сервер в папочку моё приложение (нулёвое) и открывает его в своём браузере. Вводит секретный администраторский логин с паролем, потом php смотрит существует или нет база данных под это приложение и если нет автоматом её создаёт, задав ей временное имя, которое в программу зашито, и таблицу с учётной записью администратора. Потом происходит переход в настроичную систему в которой первым делом предлагается задать имя базы данных чтобы переименовать временную базу в это имя. Тут и возникает интересный вопрос - как сохранить введённое имя базы данных ? В базе данных ведь его не сохранишь. Если сохранить его в файл, возникает загвоздка - файл у которого запрещено публичное редактирование php отказывается редактировать. Вот мне и нужно чтобы только человек который зашёл под администратором мог отредактировать этот файл и записать туда имя базы данных. Я согласен никакой проблемы нет зайти в исходник и вписать туда это имя, но почему бы не сделать это красивенько через интерфейс, если это возможно!

Это сообщение отредактировал(а) Plavozont - 24.7.2010, 09:09
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
SoWa
Дата 24.7.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



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

Пример, как у тебя:
Код

secure.php
<?php
echo "Это незащищенные данные, их видно из браузера";
?>

index.php
<?php
require_once("secure.php");
?>
//Выведет эти данные


Пример сокрытия:
Код

secure.php
<?php
function getSecureData(){
return "Это защищенные данные, их не видно из браузера";
}
?>

index.php
<?php
require_once("secure.php");
$SecureData = getSecureData();
?>
//не выведет эти данные, а оставит для твоего использования



--------------------
Всем добра smile
PM MAIL ICQ   Вверх
smartov
Дата 25.7.2010, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



Цитата(Plavozont @  24.7.2010,  08:50 Найти цитируемый пост)
в смысле на своём сервере.

Как он со своего сервера достанет (ВНИМАНИЕ) Php код!!! на твоем сервере. Учитывая что PHP код не отдается апачем. Отдается результат его исполнения.
PM MAIL   Вверх
Plavozont
Дата 27.7.2010, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да... вы меня не поняли :(

Цитата

помести её в функцию, которая будет возвращать тебе эту информацию


Информация должна быть редактируема через рhp код....

Цитата

Как он со своего сервера достанет (ВНИМАНИЕ) Php код!!! на твоем сервере.


Php код он ясень пень не достанет, а вот содержимое текстового файла(открытого для публичного редактирования к тому-же(по другому он у меня вообще никак не редактируется)) - сколько угодно  smile

Можно вообще сделать просто - создать в папке с сайтом файл имя которого равняется имени базы данных, но опять же, чтобы создать файл, у папки в которой его создаёшь должно стоять публичное право на запись. Вот скажите, это так и должно быть ? Только через публичные права на сайте можно что-то создавать/удалять/редактировать ?
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
smartov
Дата 27.7.2010, 09:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

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



Plavozont, 
Цитата(Plavozont @  27.7.2010,  05:33 Найти цитируемый пост)
Информация должна быть редактируема через рhp код....

Цитата(Plavozont @  27.7.2010,  05:33 Найти цитируемый пост)
а вот содержимое текстового файла(открытого для публичного редактирования к тому-же(по другому он у меня вообще никак не редактируется)) - сколько угодно


Чувак, снимись с ручника. Тебе уже по десятому разу объясняют! 

1) Кто тебе мешает из PHP кода редактировать другой PHP код? Нафига делать текстовый файл с настройками, а потом бояться что его сопрут? Делай PHP файл с настройками и редактируй его! Извне его достать нельзя ---------> Вот и нет проблемы!

2) На публичное редактирование тебе плевать c колокольни. С другого сервера НИКАК нельзя отредактировать файл на твоем сервере, даже если на него стоят права 0777. Разве что ты сам их пригласишь, предварительно выдав пароли на ssh или ftp.

Если же у тебя на ТВОЕМ ЖЕ сервере в соседней папке рядом живут чуваки, которые могут технически украсть твой файл - я тебе сочувствую и ты НИКАК не решишь эту проблему, кроме как положить все в базу. Но даже в таком случае шанс кражи минимален, так как они не знают твою структуру папок и не знают, где у тебя лежит этот файл.
PM MAIL   Вверх
Plavozont
Дата 28.7.2010, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Кто тебе мешает из PHP кода редактировать другой PHP код?


Аммм... так яш уже спрашивал: "А КАК??"... извините...
--------------------
Fortunately, the circumstances under which those words are useful run out at a relatively low level of multiplicity.
PM MAIL   Вверх
ksnk
Дата 28.7.2010, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(Plavozont @  28.7.2010,  04:32 Найти цитируемый пост)
так яш уже спрашивал: "А КАК??".

Для примера - разместить у себя на сервере во такой скрипт.
Код

<?php
define('FILE_TO_EDIT','config.php');

if(isset($_POST['save'])){
    if(get_magic_quotes_gpc())
        stripslashes($_POST['file']);
    file_put_contents(FILE_TO_EDIT,$_POST['file']);
}

if($_SERVER['REQUEST_METHOD']=='POST'){
    header("location: http://".$_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI']);
    exit;
}

if(is_readable(FILE_TO_EDIT))
    $text=file_get_contents(FILE_TO_EDIT);
else
    $text='';
?>

<body>
<form action="" method="post">
<textarea name="file">
<?=htmlspecialchars($text);?>
</textarea>
<input type="submit" name="save" value="Save">
</form>
</body>

Если ввести в адресной строке броузера адрес этого скрипта и побеспокоится, чтобы файл config.php был открыт для записи (установить ему правильные атрибуты). То скрипт будет способен редактировать этот файл.

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
skyboy
Дата 28.7.2010, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(Plavozont @  28.7.2010,  03:32 Найти цитируемый пост)
так яш уже спрашивал: "А КАК??"

так же, как и текстовые файл. естественно, надо следить, чтоб соблюдался синтаксис формируемого РНР файла.
следи за моими руками:
Код

$config = array('dsn'=> 'mysql:host=localhost;dbname=testdb', 'home'=> getcwd(), 'otherConfig'=> 'otherValue');
$configFileName = 'config.php';
unlink($configFileName); // удаляем текущий
$content = '<?php' . "\n";
foreach($config as $key => $value) {
  $content .= '$config["' . $key . '"] = "' . str_replace('"', '\"', $value) . '";' . "\n";
}
file_put_contents($configFileName, $content);

это велосипед, не лишенный недостатков.
лучше использовать var_export
Код

$config = array('dsn'=> 'mysql:host=localhost;dbname=testdb', 'home'=> getcwd(), 'otherConfig'=> 'otherValue');
$configFileName = 'config.php';
unlink($configFileName); // удаляем текущий
$content = '<?php' . "\n";
$content .= '$config = ' . var_export($config, true);
file_put_contents($configFileName, $content);

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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