Вопрос по upload в php

М
На сайте с 01.12.2005
Offline
73
#61
mustafa:
да есть через shell_exec(). Но демона запустить из под вэб-сервера хостер не даст. А pcntl_fork() по умолчанию нигде не стоит, да и не спасет он здесь. Будет ждать пока дочка закончит работу.

Это печально. Ведь длинные задачи лучше выполнять асинхронно.

Cервис для оптимизаторов Optimizer Desktop (http://jdev.ru/od/?utm_source=forum.se.ru&utm_medium=signature): мониторинг позиций, учет ссылок. Программа для оптимизаторов и вебмастеров OptiSuit (http://optisuit.ru/?utm_source=forum.se.ru&utm_medium=signature): Optimizer Desktop на Вашем компьютере
mustafa
На сайте с 28.10.2005
Offline
202
#62

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

Зингельшухер:
if ($_POST['pass'] === $password) {

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

Зингельшухер:
if ($filename !== 'index.php') {

а "важным" мы считаем файл только index.php? Все остальное - фигня? Может уж тогда проверять filesize($filename)? Типа, а не хотим ли мы писать в уже существующий непустой файл.

+ само построение скрипта. Код сильно переплетается с html, а этого нужно избегать. Нужно отделять зерна от плевел. При отладке или доработке - это просто гемороище.

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

p.s. Зингельшухер, это вы помогли только одному человеку, а их на форуме регулярно появляется по несколько штук. Я по мере возможности всегда стараюсь им помочь. И надеюсь теперь ВЫ, прежде чем критиковать что-то, сначала предложите свой вариант :) И поймете, что не так-то уж и просто дать ПОЛНОСТЬЮ готовый вариант (а вернее - времени жалко). Да и не люблю я честно говоря за кого-то разжевывать и в рот готовенькое ложить. Я даю основу, от чего нужно плясать, а дальше уже было бы желание у просящего.

Miha Kuzmin (KMY), да хз 🤣 сам я пишу с ==

[Удален]
#63

У вас там = не лишние ? (мимо проходя...)

[Удален]
#64
mustafa:
Ну раз уж это у нас получился скрипт в последней инстанции претендующий на универсальность, безопасность и эффективность. Рассмотрим его подробнее

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

mustafa:
а "важным" мы считаем файл только index.php? Все остальное - фигня?

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

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

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

Miha Kuzmin (KMY):
У вас там = не лишние ? (мимо проходя...)

Писал на скорость по этому не думал об этом, так как на работоспособность скрипта это не повлияет

(было бы хуже если бы там была дыра как в рнрВВ 2.0.12 где именно из-за нехватки одного знака "=" можно было войти под любым пользовательем подправив лишь кукиш)

[Удален]
#65
mustafa:
это вы помогли только одному человеку, а их на форуме регулярно появляется по несколько штук.

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

mustafa:
Код сильно переплетается с html

Смысл шаблонизации не в разделении кода от HTML а в разделении логики представления от логики приложения, в моём случае логика разделена почти идеально (почти потому что там её почти нету) за исключением того что шаблоны не выведены во внешние файлы НО ЭТО СПЕЦИАЛЬНО для того чтоб запостить скрипт в форум одним файлом а не выкладывать его в zip архив в котором отдельны были бы раздельные файлы шаблонов, конфигурации, и.т.д.

dkameleon
На сайте с 09.12.2005
Offline
386
#66
Зингельшухер:
а до универсальности и гибкости его только дурак будет бесплатно доводить ибо работы там будет немерянно...

Разве не об универсальности и гибкости Вы говорили тут?

/ru/forum/comment/1642201

Miha Kuzmin (KMY):
У вас там = не лишние ? (мимо проходя...)

Кстати да, из мануала, дабы почувствовать разницу:

$a == $b Equal TRUE if $a is equal to $b.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)

$a != $b Not equal TRUE if $a is not equal to $b.
$a !== $b Not identical TRUE if $a is not equal to $b, or they are not of the same type. (introduced in PHP 4)

А то реакция всех учавствующих в дискусии: "хз, главное работает" :)))

Зингельшухер:
Это для того чтоб не пытаться переписать самого себя, так как закачка под паролем никто не сможет закачать вредоносный код кроме того кто знает пароль

Ну в таком уж случае куда качественнее будет сравнивать с basename(__FILE__) или basename($_SERVER["SCRIPT_FILENAME"]) ;)

Дизайн интерьера (http://balabukha.com/)
[Удален]
#67
dkameleon:
Разве не об универсальности и гибкости Вы говорили тут?

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

Так как этот скрипт работает на РНР4.1=>РНР5.2 и в этом плане гибкость присутсвует и на хорошем уровне, просто "параноидальная" гибкость (чтоб он мог работать с сокетами и curl если не работает fopen) в моём скрипте отсутствует, но чтоб это сделать достаточно добавить несколько строчек (добавить один "elseif" чтоб если не сработает fopen попробовать fsockopen) и кардинальных изменений логики скрипта не потребуется и будет делом 2-х минут. (ничего даже не нужно редактировать, просто добавить несколько строк и всё)

dkameleon:
Ну в таком уж случае куда качественнее будет сравнивать с basename(__FILE__) или basename($_SERVER["SCRIPT_FILENAME"])

basename(__FILE__) согласен, а вот SCRIPT_FILENAME мимо ибо отличается в зависимости от того модулем стоит РНР или как CGI

dkameleon:
дабы почувствовать разницу:

Пример из мануала

var_dump("1" == "01"); // 1 == 1 -> true

т.е если пароль будет "*^(&(FHNVH" то при сравнении с двумя знаками равенства проверка будет проходить при вводе пустого пароля (именно эта дыра была в рнрВВ 2.0.12)

sun
На сайте с 22.10.2005
Offline
81
sun
#68

Убил 10 мин и прочитал все до конца :)

Человека довели до того что он пароли станет ставить на скрипт закачки. Просто сохраняйте с запрещенным выполнением и за пределами www. Если нужно закачать большой файл используйте fsockopen, думаю при нормалном канале по 5мб будет за несколко секунд закачивать. И еще насколько я знаю если фал создан скриптом то он иполнятся не будет при нормальных настройках сервера.

devmen.com (http://devmen.com/)
[Удален]
#69
sun:
Человека довели до того что он пароли станет ставить на скрипт закачки. Просто сохраняйте с запрещенным выполнением и за пределами www.

достаточно вовсе просто на папку с закачками поставить пароль через .htaccess и всё :)

sun:
Если нужно закачать большой файл используйте fsockopen, думаю при нормалном канале по 5мб будет за несколко секунд закачивать.

разница не в том с помощью чего качать, а как именно, т.е кусками или сначала сразу в оперативу (file_get_contents) а потом на диск...

sun:
И еще насколько я знаю если фал создан скриптом то он иполнятся не будет при нормальных настройках сервера.

Речь не о нормальном сервере а о каком-то украинском хостинге... (нет никаких гарантий что он там будет настроен...)

mustafa
На сайте с 28.10.2005
Offline
202
#70
Зингельшухер:
Претендующий только на безопасность и эффективность

безопасность=0.

Зингельшухер:
однако к одностороннему криптованию в данном случае прибегать нет смысла ибо это единичный случай хранения пароля

о, как мы заговорили! Единичный случай начали рассматривать. Лень писать было, да? Я вот, что скажу: полгода-год назад здесь на форуме произошел один случай. Фирма программистов написала каталог для обмена ссылками и продавала его по 300$. А там открытым текстом (не хэшированном) в файле const.phtml лежали пароли ко всему (естессно у 90% хостеров phtml - это не php а чиcтый plain/text :)). И один шибко умный покупатель разослал письмо другим покупателям, что он знает их пароли и если они не переведут 100$ он поудаляет все. Пароли к этим письмам он приложил и сказал, что если они будут поменяны - ему не составит труда их заново узнать. МНОГИЕ перевели деньги. И на форуме разработчик рьяно доказывал, что он во всем прав, а виноваты хостеры. И по поводу Вашего скрипта - еще раз повторяю - это глюк, баг и действительно троян намного опаснее моего :) Так, что чья бы корова мычала 🤣

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий