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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Upload: Защита файлов. Безопасность. 
V
    Опции темы
EugenyPavlenko
  Дата 10.10.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день.

Вопросов 2:

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

1) Что это за код и как обезопасить сервер? (я так понимаю после отгрузки такой картинки, просто набирается ее линк в бровзере и оля ля ля серверу кранты (зависит от кода, конечно)...)


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

2) Как сделать, чтобы загрузить файл мог только тот юзер, которому этот файл посылают? (у Юзеров есть айдишники и все дела)

Просто так получается, что сейчас загрузить файл может КАЖДЫЙ, кто знает путь к файлу... а надо чтобы ТОЛЬКО тот, кому этот файл предназначен.


Заранее Спасибо.

Это сообщение отредактировал(а) Dzuchara - 10.10.2007, 17:18
PM WWW   Вверх
Pokoinik
Дата 10.10.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 17.3.2007
Где: /dev/null

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



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

По второму вопросу:
можно хранить имидж в бд и давать право скачивать только юзеру которомцу имидж предназначен...


--------------------
ICQ: 490-993
Существует только 10 типов людей: те, которые понимают двоичную систему, и которые ее не понимают!!!
Опасайтесь людей верующих, ибо у них есть боги, которые им все прощают.

Делай или не делай! Никаких попробую!
Йода (Yoda), мастер-джедай
PM MAIL ICQ   Вверх
comcon1
Дата 10.10.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



может, так:
 закрываешь в апаче доступ в директорию с файлами, а в PHP пишешь:
<?
fopen(ля-ля, новый картинк);
fprintf(ляля, implode("secret_dir/file.jpg"));;
fclose(ляля);
?>
далее переаддресовываем на новый картинк

позднее новый картинк стираем.


--------------------
PM MAIL   Вверх
chiffa
Дата 10.10.2007, 20:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ИМХО лычший вариант вариант в самом деле картинки в БД т.к. остается возможность обращения к катинке по адрессу http://mysait/img/gtr.gif. 
да и вообще туту дело случия если злоумышлиник-изващенец захочет сделать "бо-бо" собственно он и загрузит картинку с вредоносным кодом на твой сервак и в дальнейшем сам же ее выполнит. Опять же таки вариант сканить скриптом содержание картинки на наличие тегов типа <?php, <?, <script> и т.д....
PM MAIL   Вверх
EugenyPavlenko
Дата 10.10.2007, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Выводы:


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

А второй вопрос касается не картинок, а Архивов! Соответветственно архивы могут быть большого размера (например 10 Мб) и по-этому, я думаю, что лучше не хранить их в БД.

Можно развить идею comcon1, но возникают вопросы:
1) Как закрыть доступ к директорию? (Deny From All)?
2) Если я закрою директорию, сможет ли мой собсвенный пхп-скрипт сохранять туда upload-файлы?
3) Код Пхп совершенно не понятен мне...

Код

<?
fopen(ля-ля, новый картинк);
fprintf(ляля, implode("secret_dir/file.jpg"));;
fclose(ляля);
?>


Что он делает? Выводит содержимое файла? причем тут implode?


PM WWW   Вверх
dsCode
Дата 10.10.2007, 20:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

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



1. Насчет кода в гифе - старый "баг", залатанная дыра, наверно, везде уже (это надо, чтобы mime-тип картинки не был прописан, как картинка в настройках веб-сервера).

2. Насчет хранения картинок в базе - не надо, со временем база раздуется и будет все тормозить жутко.

3. По поводу загрузки файла только нужным юзером:
  - сделать таблицу связи "файл-юзер"
  - проверять по сессии и если файл присутствует в таблице связи для этого юзера .....
  -  ..... отдавать его не прямым линком, а download-хэдерами.


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
EugenyPavlenko
Дата 10.10.2007, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



dsCode, 

Цитата

1) Как закрыть доступ к директорию? (Deny From All)?
2) Если я закрою директорию, сможет ли мой собсвенный пхп-скрипт сохранять туда upload-файлы?


по поводу этого не знаешь?

Цитата

-  ..... отдавать его не прямым линком, а download-хэдерами


Почему не прямым и как выглядят эти download-хэдеры?
PM WWW   Вверх
chiffa
Дата 10.10.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

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



Dzuchara, если "Денай Фром Ол" будет стоять - вообще нельзя будет взять этот файл напрямую, а вот через хэдер - пожалуйста. Да, это, на мой взгляд, самый правильный способ (с учетом пунктов из предыдущего моего поста):

- поставить deny from all
- отдавать хэдерами (никто не узнает реальный путь, даже сам юзер, которому принадлежит файл)

Код

  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  header("Content-Type: application/force-download");
  header("Content-Type: application/octet-stream");
  header("Content-Type: application/download");
  header('Content-Disposition: attachment; filename="dsCode.gif";');
  header("Content-Transfer-Encoding: binary");
  readfile('img/html/dsCode.gif'); // пусть к файлу



--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
EugenyPavlenko
Дата 11.10.2007, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



chiffa, 

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


dsCode, 

Я подумал что лучше сделать так: после аплоада файла дописывать в самое начало - в название файла Айди юзера, которому он предназначается... а при скачивании просто парсить название файла и смотреть чтобы Айди совпадали... Это очень просто.

Крайне приблизительный код:

Код

<?php
//...
$filename = "123_arhive.rar";

$x = explode( "_", $filename );

if ( $x[ 0 ] == $user["id"] )
{
  dl_file ( $filename );
}
?>



На всякий случай пастую немного доработанную ф-цию закачки:
Код

function dl_file( $file )
{
    $len = filesize( $file );

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header('Content-Disposition: attachment; filename="'.basename( $file ).'";');
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    readfile( $file );
}



Может быть кто-нить не знает: До вызова этой ф-ции не должно быть никакого вывода! (output)


dsCode, спасибо за очень компетентный ответ. Все проверил - все работает!

Остальным учасникам темы также огромное спасибо за помощь!

Это сообщение отредактировал(а) Dzuchara - 11.10.2007, 23:11
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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