Как? Безопасная загрузка php файла с массивом

Demona

Новичок
Как? Безопасная загрузка php файла с массивом

Как? Безопасная загрузка php файла с массивом
Мне требуется разрешить пользователям загружать php файлы c приблизительно следующим видом

PHP:
<?php

$my_array = array(

'p1'=>'e1',
'p2'=>'e2',
'p3'=>'e3'
);
?>
(в дальнейшем я импортирую my_array в базу)

Как сделать безопасную загрузку/обработку? Рекомендации, подводные камни?
 

soines

Новичок
Re: Как? Безопасная загрузка php файла с массивом

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

fixxxer

К.О.
Партнер клуба
ну можно токенайзером проверять, но это жесть =)
 

delorge

Новичок
Re: Как? Безопасная загрузка php файла с массивом

Автор оригинала: Demona
Как? Безопасная загрузка php файла с массивом
Мне требуется разрешить пользователям загружать php файлы c приблизительно следующим видом
Для чего?

Рекомендации, подводные камни?
Не надо так делать.
 

Demona

Новичок
если кратко - это формат языковых файлов такой. Изменить формат нельзя :(. Хотелось бы минимизировать количество действий требуемых от пользователя и оставить формат файлов и название оригинальными.

А если на стадии загрузки($_FILES) переименовывать файлы, а потом читать как текстовый файл построчно, разбирая своим парсером в массив? Могут быть проблемы с безопасностью?
 

delorge

Новичок
А если на стадии загрузки($_FILES) переименовывать файлы, а потом читать как текстовый файл построчно, разбирая своим парсером в массив? Могут быть проблемы с безопасностью?
1. Не складывай их туда, откуда их могут запустить.
2. Не включай в свои скрипты инклудом.
3. Разбирай как обычный текстовый файл.
4. Перед вставкой в базу обрабатывай значения функциями mysql_real_escape_string() или intval() - для целых чисел.
5. Если значения должны удовлетворять каким-то условиям, это тоже надо проверять перед вставкой.
 

Фанат

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

Demona

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

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


delorge Спасибо :) я в принцип и думала так же сделать - использовать папку вне www директории, разбирать как текст, стирилизировать строки перед публикацией. Но у меня есть здоровая доля паранойи, которая постоянно говорит мне, что мои знания о безопасности в php очень начальные (что в принципе примерно так и есть).
 

Demona

Новичок
ok. разрабатывают сервис для удобного перевода файлов под данную систему.
 

delorge

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

delorge Спасибо :) я в принцип и думала так же сделать - использовать папку вне www директории, разбирать как текст, стирилизировать строки перед публикацией. Но у меня есть здоровая доля паранойи, которая постоянно говорит мне, что мои знания о безопасности в php очень начальные (что в принципе примерно так и есть).
Это неправильный подход. Делать так - не надо.
Надо рассказать подробно суть проблемы, выслушать рекомендации и сделать правильно.
 

Demona

Новичок
Автор оригинала: delorge
От кого ты хочешь защититься?
От разработчиков дополнений?
Сервис будет открытым, то есть воспользоваться им теоретически сможет каждый кто пройдет регистрацию.
 

delorge

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

Demona

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

p.s. delorge почему вы считаете это неправильным подходом?

Зачем предоставлять кому попало возможность закачивать на срвер php-файлы, если делать это должны только разработчики дополнений?

Разработчиков достаточно много и возможности аппрува каждого из них нет.

-~{}~ 05.04.10 11:29:

Автор оригинала: Demona
Предлагаю написать собственный парсер таких файлов
ну вот пока мне и видеться это наиболее правильным решением.
загружать, переименовывать, в свой парсер. На выходе(при экспорте из сервиса) - парсером воссоздавать php файл по структуре в папке выше рута сайта, в зип архив и пользователю.

p.s. delorge почему вы считаете это неправильным подходом?

Зачем предоставлять кому попало возможность закачивать на срвер php-файлы, если делать это должны только разработчики дополнений?

Разработчиков достаточно много и возможности аппрува каждого из них нет.
 

newARTix

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

Для последнего случая, по-моему, лучше использовать файлы формата ini. Который очень подходит для таких вот "языковых" файлов.
Юзер загружает файл формата ini, ты читаешь его стандартной функцией, без риска фатально ошибиться и преобразуешь в нужный тебе формат.
http://ru2.php.net/manual/en/function.parse-ini-file.php

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

delorge

Новичок
delorge почему вы считаете это неправильным подходом?
Потому что файлы с расширением php, содержащие программный код на языке php не предназначены для передачи массивов текстовой информации.
Если их для этого используют, 99,99% вероятности, что где-то что-то не так, и надо сделать по другому.

Зачем предоставлять кому попало возможность закачивать на срвер php-файлы, если делать это должны только разработчики дополнений?
Разработчиков достаточно много и возможности аппрува каждого из них нет.
То есть кто попало может закачать на сервер дополнения, которые будут использоваться в специализированном ПО?
Каким образом они в нем будут использоваться?
Проверяется ли содержимое закачанных файлов перед использованием?
Если проверяется, то кем?
 

Demona

Новичок
newARTix
как я и говорила ранее, основная программа не моя. Стандарт четкий, если он не будет соблюдаться, значит, приложение созданное разработчиком работать не будет.
Поэтому если писать свой парсер, можно просто игнорировать все, что не в формате.

delorge
ok.ok.ok :) объясню немного подробнее про задумку - я разрабатываю сервис, который будет помогать в коллективном переводе интерфейсов к дополнениям. То есть сами дополнения не будут закачиваться на сайт - будут только импортировать языковые строки из оригинальных файлов(которые и надо будет закачивать). Файл закачивается, строки регистрируются в базе, пользователи переводят их, а затем могут выбрать проекты и выкачать готовый результат(в последнем я не вижу особых подводных камней, как и говорила выше – просто буду формировать php файлы выше корня сайта, там же паковать в zip архивы и отдавать пользователям).
 

soines

Новичок
Судя по первому сообщению, вы сами импортируете текст в базу. В какой виде это хранится в базе?

И в добавок, если вы сами заносите данные в базу, то почему нельзя импортировать их из файлов другого формата( того же ini ), а при скачивании или когда еще нужно , конвертировать их в тот же php.
 

Demona

Новичок
хранится в текстовых полях(немного не понимаю вопроса).

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