Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 6/7/8 » Уязвимость в файле .env » 24.08.2020 19:22:26

интересная статья, но я все равно не понимаю как эта уязвимость могла сработать. При обращении к странице \.svn я ведь получу то же сообщение что страница не найдена. Роутер ведь отсечет этот запрос.

artoodetoo прав:

роутер срабатывает только для тех файлов, для которых веб-сервер не нашёл соответствующего "статического" файла

Но соль проблемы глубже. Раньше в Subversion (это, можно считать, предшественник git) папки .svn создавались не в корне репозитория, как у .git, а в каждой подпапке. Каждая такая папка содержала интересные вещи типа истории и исходников. Соответственно, если у тебя сайт деплоится из Subversion, то в твоей папке public_html (или аналога) всегда лежала "скрытая" папка .svn. Это описанная в статье уязвимость.

С git и Laravel проблема как будто не актуальна, так как git не мусорит своими папками везде, а Laravel поделен на корень и на public_html, причем public_html это подпапка в корне и потому .git в ней нет. Однако даже в Laravel есть любители перепиливать пути так, чтобы корень сайта указывал на корень фреймворка, то бишь помещают public_html в корень. А теперь добавь к этому модную нынче тенденцию все деплоить из git (я не говорю, что это плохо), и привет - в корне лежит .git, где, в отличии от Subversion, которая хранила только верхний коммит, хранится ВСЯ история и ВСЕ исходники во ВСЕХ папках данного репозитория. (Если не используется shallow repository.)

Так что будь начеку. Я лично советую всегда помещать это правило в конфиг всех хостов nginx:

location ~ /\. {
  deny all;
}

Правда, это отключит и запросы ACME, так что если используется Let's Encrypt, то надо добавить и второе, пустое:

location ^~ /.well-known/ {
}

#3 Re: Прочее » Предложение по форуму: права в зависимости от рейтинга » 23.08.2020 15:53:24

Скорее наоборот, пользователя отпугнёт отсутсвие какой-либо защиты.

Я сомневаюсь, что много кто болезненно реагирует на изменение числа своих папугаев. Это ж не Хабр.

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

Такое бывает.

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

#4 Re: Laravel 6/7/8 » Уязвимость в файле .env » 23.08.2020 15:47:19

по идее не должны быть доступны

Я просто оставлю это здесь: https://habr.com/ru/post/70330/

#5 Re: Laravel 6/7/8 » как исправить ?Trying to get property 'title' » 12.07.2020 20:44:08

я хочу научиться

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

Вот хорошие примеры вопросов: тыц, тыц, тыц. Учитесь на здоровье.

#6 Re: Laravel 6/7/8 » как исправить ?Trying to get property 'title' » 12.07.2020 20:16:35

Администратор бывает на форуме вообще?

Бывает, но он терпелив и всепрощающ. Ну, и кнопку "Пожаловаться" никто не отменял.

Впрочем, я уже выдал данному товарищу ограничение на 2 поста в сутки.

#7 Re: Laravel 6/7/8 » Laravel 6 и 7 и создание новостного портала » 12.07.2020 20:13:58

Это универсальный фреймворк и для таких вещей он вполне подходит.

#8 Re: Laravel 5.x » Почему не выводятся вложенные категории и как сделать чтоб категории н » 09.07.2020 22:08:42

Пиши все в одном сообщении, код оборачивай в [C0DE] и в теме указывай краткий вопрос, а не просто копируй его. Ты же видишь, что он обрезается? Если хочешь, чтобы помогали, то уважай других людей, которые читают твои сообщения.

#9 Re: Laravel 5.x » как исправить это » 09.07.2020 22:07:17

Command 'сhown' not found, did you mean:

  command 'chown' from deb coreutils

Try: sudo apt install <deb name>

Вот же тебе пишут: "команда не найдена, может ты хотел такую-то из такого-то пакета? если да, то выполни то-то".

sudo apt install coreutils

Далее:

sudo chown -R www-data: /var/www

P.S: artoodetoo - после : не обязательно писать группу, если она совпадает с группой пользователя, что в 90% именно так.

#10 Re: Прочее » А где Laravel-7 ? » 06.05.2020 19:50:33

Предлагаю открыть ветки по 6 и 7 ветке Laravel.

Чем не она?

7-ю ветку готов курировать.

Курировать нечего, пока о ней никто не знает - лучше народ просвещать путем перевода статей. Ну, или свои статьи писать, кнопка сверху.

#11 Re: Laravel 5.x » Защита сайта от шеллов и ошибок Laravel 5, как? » 15.04.2020 11:27:16

Слишком широкий вопрос. Начни со списка OWASP-10 и вообще почитай про этот проект хотя бы на Википедии.

Шелл это загруженной скрипт, как я понял, через который потом можно управлять файлами - как они его загружают?

Я как-то написал статью про такую "дыру" в одном существующем движке.

#12 Re: Laravel 6/7/8 » Отправка почты » 15.04.2020 11:22:21

Может я и не прав , но ни в одной из версий Laravel в helpers я не нашел этой функции .

Это функция стандартного расширения mbstring для PHP, которая обрезает текст с многоточием: https://www.php.net/manual/en/function.mb-strcut.php

#13 Re: Laravel 6/7/8 » Подскажите с sqlite » 15.04.2020 11:20:40

В файле config/database.php Закоментируй  'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),

Отключение внешних ключей - плохая идея с точки зрения целостности базы.

#15 Re: Laravel 5.x » Как заменить много use'ов одним или правильная организация структуры. » 08.03.2020 14:39:44

Тут однозначного ответа/совета быть не может - у каждого свое понимание ООП (а кто-то вообще против него, хоть таких в PHP не много). Так что ниже сугубо мое личное мнение.

Ты столкнулся с ситуацией, когда излишняя иерархия вредит. Есть две иерархии: плоская (по сути, отстутствие иерархии) или полная (предельная группировка по пространствам имен, как в твоем желаемом примере с App\TelegramBot\Actions\Keyboards\Xyz...).

Когда-то, в PHP до версии 5.3 пространств имен (namespaces) не было. Во многих ЯП их нет до сих пор (Си, JavaScript, Lua и пр.). В этом случае проблема коллизий (совпадений имен, когда у тебя есть класс Foo и у библиотеки тоже есть класс Foo) решалась путем префиксов и суффиксов. Например:

MyTelegramBotKeyboardAction

Когда появились NS и народ кинулся в другую крайность, получилось так:

My\Telegram\Bot\Action\Keyboard

Интересно заметить, что первый вариант гораздо ближе к естественному написанию, чем второй ("my telegram bot's keyboard action" <=> "my telegram bot, (its) action (of/for) keyboard").

А еще интереснее, что многие вообще начинают совмещать оба подхода, и вот это мне совсем не понятно:

My\Telegram\Bot\Action\KeyboardAction

Ясно, что так проще (короче) писать use, но это уже совсем масло-масляное ("ActionKeyboardAction") - может тогда это промежуточное пространство имен вообще не нужно?

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

MyTelegramBot\KeyboardAction

То есть одно большое NS, где внутри все остальное, без под-NS. Такая структура позволяет избежать use практически целиком. Например, если у тебя есть класс App\TelegramBot\Commands\SomeCommand и ему надо вызвать метод у Core, то ты будешь писать так:

class SomeCommand {
  function foo() {
    \App\TelegramBot\Core::bar();

Или так:

use App\TelegramBot\Core;

class SomeCommand {
  function foo() {
    Core::bar();

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

А вот если у тебя и Command, и Core в одном NS - то никаких проблем:

class SomeCommand {
  function foo() {
    Core::bar();

Получаешь лучшее из двух миров - use не надо (ибо классы в одном NS), в то же время ссылаешься на класс, как будто бы use был.

Таким образом, use или пути остаются только для зависимостей (библиотек), но это неизбежное зло и обычно к классам из библиотек обращений на порядок меньше, чем к собственным, так что озвученная проблема особо не стоит.

Моих знаний ларавеля, как и ООП, недостаточно, чтоб правильно реализовать данную задачу. Как я понимаю, необходимо создать что-то на подобии автолоадера, который будет автоматом подгружать каждый класс из каждой папки и переносить их в Core.

Я думаю, тебе стоит почитать про ООП в PHP подробнее, потому что у тебя путаница: use не вызывает автозагрузчик и вообще никак не относится к нему. Автозагрузчик сам по себе. Когда ты пишешь use, ты просто создаешь псевдоним для отдельно взятого класса в рамках этого файла: вместо \Some\Class::foo ты можешь написать один раз use Some\Class и далее везде просто Class::foo.

В доке по PHP все очень хорошо расписано:

#16 Re: Общий раздел » Существуют ли пакеты для laravel для создания графиков на php без js? » 02.03.2020 15:50:35

Раньше до laravel использовал библиотеки pchart

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

#17 Re: Вакансии » Для любителей нестандартных задач - Переделать калькулятор » 18.02.2020 22:29:55

И что в итоге, кого-то оставят ни с чем.

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

Все это от характера конкретного проекта зависит, и от изобретательности заказчика тоже, конечно.

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

Платить сразу обоим за одну работу мало кто будет.

Есть разные ситуации. Пример: до лета осталось три месяца, кто-то хочет под этот сезон сделать что-то связанное с путевками. Три месяца - времени в обрез, пропустишь - жди еще полгода (до зимы), а то и до следующего лета. А если у тебя/него/заказчика партнер, который инвестирует и через месяц может к этому делу "остыть" (у меня такое было)? Тут давать каждому кандидату по 3 недели - не вариант.

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

Причем наверняка того, кто серьёзнее вникает, но дольше пишет.

Я не говорил, что надо оценивать по скорости работы. Человек может работать медленно, но регулярно держать связь. Если используется таск-менеджер - там видно обновления, если GitHub или другой подобный сервис - там коммиты, если их нет, но он "вникает" - значит, на почту приходят вопросы, отчеты раз в день/неделю/месяц, никаких тебе "завтраков" и так далее. Даже когда "дольше пишешь" - у тебя хоть десяток строчек в день есть. Не должно быть такого, что человек на неделю куда-то пропал. Да даже на два дня не должно быть. Не появился на горизонте, когда обещал - жди день и все, считай что исчез (ибо дальше с ним будет почти наверняка хуже). Конечно, есть исключения, но когда человек тебе совсем не знаком - лучше "перебздеть", шанс попасть в такое исключение весьма мал.

з.ы: Boris2020, если вам надоели наши разговоры - отпишитесь, я заблокирую тему.

#18 Re: Вакансии » Для любителей нестандартных задач - Переделать калькулятор » 18.02.2020 16:26:56

А потом просто пропал и не отвечает ?! Три недели потеряно.

Это "нормально" для фрилансеров - надо сразу начинать работать с несколькими, если время дороже денег. Через месяц уже понятно, кто остается, а кто "слился". В крайнем случае, если осталось больше одного - вместе быстрее закончат проект или начальный этап (но такое бывает редко).

#19 Re: Laravel 5.x » выключить\включить сайт » 16.02.2020 19:57:26

этим будет пользоваться обычный юзер а не сисадмин

Я поэтому про allow_request и написал. auth.php может проверять файл на наличие, какую-то строку в БД и пр.

я решил проблему так- создал обычную пхп страницу которая умеет выполнять команду php artisan down\up

Позволять выполнять shell-команды из PHP - плохая идея с точки зрения безопасности.

#20 Re: Laravel 6/7/8 » Подскажите с sqlite » 16.02.2020 19:56:28

Я то думал сначала надо sqlite3 раскоментить. Но так не работало.

sqlite3 - это для функций типа sqlite_open(). pdo_sqlite - это драйвер для функций PDO, а PDO работает сразу со многими БД. Laravel использует PDO, как и все современные проекты.

В соседней папке другой проект на ларе созданный изначально на убунтУ работает. А клонированный с 500 падает.

Смотри логи сервера и логи Laravel.

#21 Re: Laravel 5.x » выключить\включить сайт » 16.02.2020 12:50:34

Вообще, желательно, чтобы веб-сервер выдавал плашку "обслуживание", а не само приложение. С сервером нет шансов, что какие-то запросы "протекут" (потому что для них middleware не работает или еще что-нибудь подобное). В случае с nginx это делается добавлением набора allow/deny в блок server или location:

allow 1.2.3.4;
allow 5.6.7.8;
deny all;

Но есть и более интересный способ, про который мало знают. В nginx есть опция auth_request - с ней вопрос об аутентификации можно решать в контексте приложения! Когда приходит внешний запрос, nginx опрашивает этот URL и если в ответе код 401 или 403 - пользователю дается "отлуп" (который можно показать в виде красивой кастомной страницы об ошибке путем error_page). В отличии от ручного прописывания allow/deny, здесь не нужно править конфиг сервера, перезапускать его, вообще лезть в консоль, да и гибкость куда большая.

Выглядит это примерно так (подробности в документации):

server {
  ...

  error_page 403 /403.html;

  location / {
    auth_request /auth.php;
    include fastcgi.conf;
  }

  location = /auth.php {
    include fastcgi.conf;
  }
}

#22 Re: Laravel 6/7/8 » Подскажите с sqlite » 16.02.2020 12:36:07

Сделай скрипт вида <?php phpinfo(); открой его в браузере, посмотри, есть ли там среди опций pdo_sqlite. Если его нет, то, значит, в php.ini он не включен (или сервер не был перезапущен после включения). Включается просто - добавь такую строку (путь не нужен):

extension=pdo_sqlite

Она уже там где-то есть, только закомментированная (с ; в начале).

Если pdo_sqlite нет в системе, то PHP при запуске должен ругаться. Но ты говоришь, что из консоли работает - значит, он есть. Учти еще, что обычно в системе несколько php.ini - один для CLI, другой для Apache, третий для php-fpm и т.д. Если ты включаешь расширение в /etc/php/*/cli/php.ini, то в Apache оно не включится - меняй соответствующий конфиг.

#23 Re: Laravel 5.x » Убрать слеш в конце URL у папки » 11.02.2020 23:29:15

Это стандартное поведение, наверное, всех веб-серверов. Если по адресу есть директория, а URL не оканчивается на слэш - до PHP/Laravel такой запрос даже не доходит - редирект возвращает сам веб-сервер. А в чем проблема? Ты хочешь, чтобы по адресу .../blog отдавалась одна страница, а по адресу .../blob/ - другая?

Это плохая идея, будет путаница и, вероятно, с SEO тоже вызовет проблемы. Решение, если и есть, зависит от конкретного используемого веб-сервера (что еще одна причина не ломать стандартное поведение - сложно будет поддерживать).

#24 Re: Прочее » Как оценивать работу по фикс-прайсу? » 04.02.2020 12:34:34

Надо понимать две вещи:

  • "обычное приложение/лендинг/подставить_нужное" с шансом 146% окажется "необычным" (с точки зрения фрилансера)

  • даже если есть ТЗ, почти наверняка в процессе выяснится, что оно не полное, что "ой, ну тут надо мелочь еще сделать"

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

Тем не менее, если совсем никак по часам (бывают принципиальные заказчики или у которых бюджет, выше которого не прыгнешь):

  • для начала нужно получить ТЗ, максимально подробное (а не полстранички в Word типа "агитброшюра" без списка экранов, кнопок, функций и прочих требований)

  • по ТЗ оценить адекватность заказчика - насколько много дыр в функционале (ибо в процессе работы заказчик будет "раскручивать" тебя на функционал за каждую такую дыру, а ты - спорить с ним, что "под это описание можно весь Фейсбук подогнать")

  • если ТЗ адекватное и у тебя есть достаточный опыт (5-10-... штук) разработки именного такого типа сайтов - то прикидываешь, во сколько (по часам) тебе раньше обходилась разработка, какие были косяки и трудности

  • умножаешь полученное число часов на свою ставку и еще на 3

Если хоть один из пунктов не выполняется (ТЗ "с водой", нет опыта, не умножил на 2-3) - лучше такой проект не брать, т.к. почти наверняка в итоге будут споры, нервы, минусы в карму, плохие отзывы и прочее.

Как вариант, ТЗ можно составить самому (или помочь заказчику сделать это) - но, надо понимать, что это тоже не бесплатно (грамотное ТЗ это может быть вообще половиной проекта, условно). Обычно это может случаться с крупными заказчиками (300к+), которые тебе дают, допустим, 10% от грубой стоимости, ты с ними выясняешь ТЗ и в нем фиксируете вместе весь функционал. В итоге ты уверен, что "дыр" в ТЗ нет, а у заказчика появляется точный бюджет.

#25 Re: Прочее » Обновление сайта » 14.01.2020 12:24:50

Почему я не могу свою же тему не отредактировать не удалить?

Потому что народ этим злоупотребляет. Решил проблему - напиши, как, а не удаляй вопрос.

Если запостил что-то личное - нажми "Пожаловаться", я удалю.

Подвал раздела