Backend
3.95K subscribers
35 photos
705 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
Что такое DRY

«Don't Repeat Yourself / Не повторяйся»

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

Дублирование кода – пустая трата времени и ресурсов. Вам придется поддерживать одну и ту же логику и тестировать код сразу в двух местах, причем если вы измените код в одном месте, его нужно будет изменить и в другом.

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

Такой подход делает код более читаемым, поддерживаемым и менее подверженным ошибкам, так как изменения нужно вносить только в одном месте, а не в нескольких.
​​XSS атаки и как от них защититься

XSS (Cross-Site Scripting — «межсайтовый скриптинг») — подтип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода и взаимодействии этого кода с веб-сервером злоумышленника.

Рассмотрим несколько способов защиты:

• Перед тем как выводить данные на веб-страницу, убедитесь, что все специальные символы, такие как <, >, &, и кавычки, экранированы или заменены на их HTML-коды.

• Использование Content Security Policy (CSP). Это механизм, который позволяет вам установить правила безопасности для загрузки ресурсов на вашей веб-странице. CSP позволяет ограничить источники, с которых браузер может загружать ресурсы, такие как скрипты или стили.

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

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

• Установите флаги безопасности для cookies, чтобы они не были доступны из JavaScript, если это необходимо.

Эти меры помогут сделать ваше веб-приложение более защищенным от атак XSS.
6
Что такое ORM

ORM (Object-Relational Mapping) - это способ связывания данных из базы данных с объектами в программировании.

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

Реляционные базы данных: Данные часто хранятся в базах данных, которые используют реляционную модель. Такие базы данных хранят данные в виде таблиц с рядами и столбцами.

ORM выступает в качестве посредника между объектами в программе и таблицами в базе данных. Он позволяет программистам работать с объектами, как если бы они были прямо в памяти программы, в то время как ORM заботится о том, как эти объекты сохраняются и извлекаются из базы данных.

Таким образом, ORM облегчает работу с базами данных, делая код более понятным и поддерживаемым.
9
5 браузерных плагинов для Google Chrome в помощь разработчику

Grepper — Расширение, созданное на базе системы вопросов и ответов, поддерживаемое сообществом разработчиков, позволяющее программисту выяснить важные детали интересующей проблемы. При запросе оно выводит соответствующие примеры кода в верхней части поисковика.

Githunt — Небольшой, но крайне полезный аддон Chrome поможет всем, кто ищет новые полезные штуки для работы на GitHub. Выводит на передний план ленту трендовых GitHub-проектов с кратким описанием каждого.

HTML-Validator — Надстройка для выявления ошибок в HTML-коде, помогающая сверстать страницу в два раза быстрее.

Octotree — Расширение для просмотра кодовых конструкций и быстрой навигации по папкам проекта, отображающее весь исходный код в виде древовидной структуры.

Talend API Tester — Упрощает вызов, обнаружение и тестирование HTTP и REST API.

Если ли вы знаете другие хорошие плагины, которыми давно пользуетесь, не стесняйтесь добавить их в комментариях👇
🔥7🎉2👍1
Прототип

Приведем аналогию: Помните клонированную овечку Долли? (Долли (5 июля 1996 — 14 февраля 2003) — первое клонированное млекопитающее животное, которое было получено путём пересадки ядра соматической клетки в цитоплазму яйцеклетки.) Так вот, этот шаблон проектирования как раз посвящён клонированию.

Объект создаётся посредством клонирования существующего объекта.

Шаблон «Прототип» используется, когда типы создаваемых объектов определяются экземпляром-прототипом, клонированным для создания новых объектов. То есть шаблон позволяет дублировать существующий объект и модифицировать копию в соответствии с потребностями. Без заморочек с созданием объекта с нуля и его настройкой.
👍8🔥1
​​Что такое BDUF

«Big Design Up Front / Глобальное проектирование прежде всего»

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

Зачастую продумывание решений избавляло нас от проблем при разработке… Внесение изменений в спецификации занимало час или два. Если бы мы вносили эти изменения в код, на это уходили бы недели. Я даже не могу выразить, насколько сильно я верю в важность проектирования перед реализацией, хотя адепты экстремального программирования предали эту практику анафеме. Я экономил время и делал свои продукты лучше, используя BDUF, и я горжусь этим фактом, чтобы там ни говорили фанатики экстремального программирования. Они просто ошибаются, иначе сказать не могу.

— Джоел Спольски


Многие разработчики считают, что если они не пишут код, то они не добиваются прогресса. Это неверный подход. Составив план, вы избавите себя от необходимости раз за разом начинать с нуля.

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

Очень распространенный контраргумент заключается в том, что стоимость решения проблем зачастую ниже стоимости времени планирования. Чем с меньшим количеством ошибок столкнется пользователь, тем лучше будет его опыт. У вас может не быть другого шанса справиться с этими ошибками.
🔥143👍2
​​Защита от CSRF-атак

CSRF (Cross-Site Request Forgery) - это атака, когда злоумышленник заставляет пользователя выполнить нежелательное действие на веб-сайте, на котором пользователь авторизован.

Вот несколько способов защиты от CSRF:

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

Используйте атрибут SameSite для cookies, чтобы ограничить их доступ только к запросам, исходящим с того же сайта. Это помогает предотвратить использование cookies в CSRF атаках.

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

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

Эти меры помогут уменьшить риск CSRF атак и сделают ваше веб-приложение более защищенным.
Какая функция в PHP используется для установки соединения с базой данных MySQL?
Anonymous Quiz
9%
mysql_query()
61%
mysqli_connect()
30%
connect_mysql()
Что такое GraphQL

GraphQL - это язык запросов и среда выполнения, разработанные в компании Facebook.

Он позволяет клиентским приложениям запрашивать только те данные, которые им нужны, и получать их в одном запросе к серверу.

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

С помощью GraphQL клиент может указать в своем запросе, какие поля и связи он хочет получить, и сервер вернет только те данные, которые были запрошены. Таким образом, клиент имеет полный контроль над данными, которые он получает, и может избежать избыточной передачи ненужной информации.
🔥7👍3
Используйте многоэтапные сборки

Воспользуйтесь многоэтапными сборками для того, чтобы создавать более компактные и лучше защищённые образы Docker.

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

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

Применение многоэтапных сборок позволяет выходить на более компактные продакшн-образы, что способствует экономии времени и денег.
🔥5
Одиночка

Приведем аналогию: У страны может быть только один президент. Он должен действовать, когда того требуют обстоятельства и долг. В данном случае президент — одиночка.

Шаблон позволяет удостовериться, что создаваемый объект — единственный в своём классе.

Шаблон «Одиночка» позволяет ограничивать создание класса единственным объектом. Это удобно, когда для координации действий в рамках системы требуется, чтобы объект был единственным в своём классе.

На самом деле шаблон «Одиночка» считается антипаттерном, не следует им слишком увлекаться. Он необязательно плох и иногда бывает полезен. Но применяйте его с осторожностью, потому что «Одиночка» вносит в приложение глобальное состояние, так что изменение в одном месте может повлиять на все остальные случаи использования, а отлаживать такое — не самое простое занятие. Другие недостатки шаблона: он делает ваш код сильно связанным (tightly coupled), а создание прототипа (mocking) «Одиночки» может быть затруднено.
👍3
​​Что такое SOLID

S) Single-responsibility principle / Принцип единственной ответственности

Его важность невозможно переоценить. Каждый объект, класс и метод должны отвечать только за что-то одно. Если ваш объект/класс/метод делает слишком много, вы получите спагетти-код.

O) Open–closed principle / Принцип открытости-закрытости

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

Хороший способ решения этой проблемы – использование наследования. В JavaScript эта проблема решается с помощью композиции.

Простое правило: если вы изменяете сущность, чтобы сделать ее расширяемой, вы впервые нарушили этот принцип.

L) Liskov substitution principle / Принцип подстановки Лисков

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

I) Interface segregation principle / Принцип разделения интерфейсов

Этот принцип был сформулирован Робертом Мартином, когда он консультировал Xerox, и он очевиден.

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

D) Dependency inversion principle / Принцип инверсии зависимостей

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

Заботиться нужно не о том, как что-то устроено, а о том, как оно работает. Простой пример – использование дат в JavaScript. Вы можете написать для них свой слой абстракции. Тогда если у вас сменится источник получения дат, вам нужно будет внести изменения в одном месте, а не в тысяче.
👍131
​​Инструменты для проверки ваших проектов на предмет дыр в безопасности

Если вы уже успели создать свой проект, но только теперь задумались о том, что, возможно, и храните какие‑нибудь секреты в коде, решение есть. Вы, конечно, можете проверить всё вручную, но это, скорее всего, потребует уйму времени и усилий. Очевидно, что это как раз тот случай, когда автоматизация — друг человека, и вам не помешают такие инструменты, как:

TruffleHog — инструмент поиска секретов в Git‑репозиториях, сканирующий commit history на наличие ключей API и других секретных данных.

GitLeaks — инструмент для обнаружения жестко закодированных секретов, таких как пароли, ключи API и токены, в git‑репозиториях.

GitGuardian — приложение, которое работает в вашей локальной среде или в среде CI и помогает вам обнаруживать свыше 350 типов секретов, а также другие потенциальные уязвимости безопасности или нарушения политики, влияющие на вашу кодовую базу.

GitHub Advanced Security — решение от GitHub, которое тоже предлагает функцию сканирования кода на наличие секретных данных. Secret Scanning автоматически сканирует репозитории на наличие известных типов секретов (пароли, ключи API, токены доступа и др.) и может прислать вам уведомление, если такой секрет был найден.

Разумеется, вышеназванные разработки — далеко не единственные представленные на рынке: взять хотя бы те же известные SonarQube или Checkmarx.

Если вы осознали наличие проблемы — считайте, что полдела сделано. Теперь главное — уделить ей достаточное время и принять соответствующие меры, а какие вы для этой цели будете использовать инструменты, дело десятое.
👍91
​​Что такое MVC

MVC - это сокращение от Model-View-Controller (Модель-Представление-Контроллер). Это архитектурный шаблон, который используется в разработке программного обеспечения, особенно в веб-разработке.

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

Представление (View): Это то, что видит пользователь - интерфейс приложения. Представление отображает данные пользователю и отвечает за визуальное представление информации.

Контроллер (Controller): Это связующее звено между моделью и представлением. Контроллер обрабатывает пользовательские запросы, взаимодействует с моделью для получения данных и передает эти данные представлению для отображения.

Таким образом, в MVC данные (Модель) отделены от способа их представления (Представление) и от того, как они обрабатываются (Контроллер). Это делает приложения более организованными, легко расширяемыми и поддерживаемыми.
👍71
​​Параметры для удобного просмотра лога Git

Пример команды: git log --oneline --graph

Скорее всего, вам уже доводилось использовать команду git log. У неё есть много полезных параметров, которые можно комбинировать друг с другом для достижения наилучшего результата. Чаще всего используют эти:

--author="Alex Kras" — выводит коммиты, сделанные конкретным человеком
--name-only — выводит только названия изменённых файлов
--oneline — выводит сокращённые данные коммита (в виде одной строки)
--graph — выводит дерево зависимостей для всех коммитов
--reverse — выводит коммиты в обратном хронологическом порядке (сначала старые)
--after — выводит коммиты, сделанные после определённой даты
--before — выводит коммиты, сделанные до определённой даты

К примеру, от вас требуют еженедельные отчёты каждую пятницу. Достаточно написать git log --author="Name" --after="1 week ago" --oneline, немного подредактировать полученный результат и отправить их начальству.

Вообще, в Git есть много всяких полезных параметров. Просто попробуйте выполнить man git-log чтобы посмотреть все варианты просмотра истории. Если ни один из предложенных вариантов вас не устроит, вы всегда можете воспользоваться параметром --pretty, с помощью которого можно настраивать выдачу в широких пределах.
👍111
Структурные шаблоны проектирования

Эти шаблоны в основном посвящены компоновке объектов (object composition). То есть тому, как сущности могут друг друга использовать. Ещё одно объяснение: структурные шаблоны помогают ответить на вопрос «Как построить программный компонент?»

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

Список шаблонов:

• Адаптер
• Мост
• Компоновщик
• Декоратор
• Фасад
• Приспособленец
• Заместитель

О каждом из ним мы подробно поговорим в последующих постах, оставайтесь с нами!
👍7
Что такое APO

«Avoid Premature Optimization / Избегайте преждевременной оптимизации»

Эта практика побуждает разработчиков оптимизировать код до того, как необходимость этой оптимизации будет доказана. Думаю, что если вы следуете KISS или YAGNI, вы не попадетесь на этот крючок.

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

Очень простой пример – масштабирование. Вы не станете покупать 40 серверов из предположения, что ваше новое приложение станет очень популярным. Вы будете добавлять серверы по мере необходимости.

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

Многие считают преждевременную оптимизацию корнем всех зол.
👍12🔥1
​​Закрыт ли доступ к тестовой версии вашей разработки?

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

Что делать? С самого начала вам нужна какая‑то тактика!

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

Ограничьте доступ к любым тестовым версиям: убедитесь, что dev, qa, staging и другие версии сайта, кроме финальной, нельзя открыть просто так. Необходимо произвести такую настройку, чтобы они были доступны, например, только через VPN.

Защитите тестовые версии от индексации. Даже если тестовые версии вашего проекта доступны только через VPN и находятся на отдельных секретных доменах, их следует защитить от индексации поисковиками с помощью файла robots.txt или метатегов noindex.