В общем у клиента есть скрипт (не я делал), который определенным образом изменяет загружаемые изображение. В кратце работает так: 1. Загружает через input file изображение, оно сохранятся где то на сервере. 2. Потому JS библиотека это изображение берет с сервера. 3. Как нужно изменяет. 4. И теперь внимание. 5. JS берет изображение вот так вот Код (Javascript): var canvasData = c.toDataURL(); и отправляет POST запросом в такую функцию.. PHP: if($_GET['action'] == "save") { # echo "<pre>"; print_r($_GET); echo "</pre>"; $img = $_POST['imgData']; $img = str_replace('data:image/png;base64,', '', $img); $img = str_replace(' ', '+', $img); $data = base64_decode($img); $file_name = 'box1-'.rand(111,999).'-'.rand(111,999).'.png'; $file = PATH.'uploads/'.$file_name; $_SESSION['box2'] = $file_name; $success = file_put_contents($file, $data); echo $_SESSION['box2']; exit; } не кажется ли уважаемому сообществу что тут дыра через которую можно загрузить кое чего лишнего?
Уважаемое сообщество намекает, что ограничения на размер и количество передаваемых извне файлов настраивается на любом уровне приложения на уровне конфигов. Хоть на Nginx, хоть на Apache, хоть в самом PHP. Хоть на каком любом другом веб-сервере, реверспрокси, балансировщике или что там может вообще использоваться в конкретно взятой системе.
вот и у меня такое ощущение возникло)) надо переделывать)) вообще как то странно весь скрипт написан..
не, ну по крайней мере я не сказал, что загрузить можно что угодно куда угодно а так иногда бывает https://medium.com/@igordata/php-ru...execution-of-user-uploaded-files-6ff021897389
Очевидно есть некая логика через сессии следущая за загрузкой, либо так первично и для перформанса пишется связь форма-загрузки чтобы потом перенести в постоянное хранилище. Вариантов много, и да - реализация в топике это гуанокод
вполне вероятно что и не будет рейс кондишн тут. Не известно же до конца что под капотом и куда пишутся сессии.
ну я чета не вижу способа избежать рейс кондишн при работе с глобальной штукой, существующей между запросами, при этом там явно где-то есть код, который зависит от этого значения. хз
Минимизировать и без того маловероятные баги с рейс кондишн можно поменяв местами 9-ю и 10-ю строчку. Проблемы безопасности такой загрузки зависят от значения константы PATH. Пугает ограниченность имен файлов. Лично я использую time() + rand() для этого. P.S.: Зачем нужна переменная $success?
не знаю)) это был чужой код)) я все стер - и сделал заново)) Вот что получилось http://3dcoverdesign.ru/
Обложка растягивается, а торец книги обрезается. Значит есть обработка картинок. Только надо еще поставить проверку типа файла. Загрузил EPS - сервер пытался его скушать. До сих пор грузится.
сервер кушает только готовые изображения.. обработка входящих изображений происходит на стороне клиента.. так что если вертится и ничего не происходит)) где то косяк в JS)
обычно рейс кондишн нельзя вылечить переставляя строки. и уж тем более в случае, если кому-то пришло в голову использовать сессию. Проблема с сессией в том, что юзер может сделать несколько запросов к этому скрипту, но в сессию попадёт только одно значение, и сложно сказать заранее, какое именно. Более того, при обращении к другому скрипту, где это значение из сессии как раз используется зачем-то, это значение уже может быть перезаписано (а может и не быть перезаписано), и даже не один раз. Короче это какое-то непредсказуемое болото.
Речь шла не о самом рейс кондишн, а о последствиях (багах) Перестановка строк гарантирует, что пользователь получит через сессию имя файла с непустым содержимым. Да, файл может быть и не тот, с учетом того, что и имена файлов у разных посетителей могут совпасть. Проблема не только в сессии.
а, ну да, хорошо бы сначала проверить, записалось ли, а только потом в сессию заносить, это точно, ты прав.