Forwarded from Информация опасносте
Очень важная уязвимость для тех, кто работает из дома
https://labs.unit221b.com/2020/04/04/wfh-security-advisory/
https://labs.unit221b.com/2020/04/04/wfh-security-advisory/
Forwarded from CTO On Live
🏗 Архитектура API и велосипеды (ч.1) 🚲
Самая успешная модель развития SaaS сервиса это наличие открытого API, так как именно оно помогает вашему сервису получить функции, которыми обладают другие и наоборот. Многие называют его REST API, сами правда не понимая, какие именно парадигмы и ограничения должны накладываться на такое API. За свою карьеру я поучаствовал во многих проектах и прорабатывал интеграции между различными сервисами или внутренними элементами системы (микросервисами). И к сожалению вынужден сказать, что подавляющее большинство разработчиков не считают необходимым посмотреть, а был ли уже изобретен велосипед до них и продолжают делать свои вариации протоколов взаимодействия с сервисом. Сказать по правде я и сам был таким, но возможно пост ниже поможет вам перешагнуть сразу через этот этап и открыть для себя стандарты.
💻 Разрабатывая API
Здесь я не буду писать о том, как надо проектировать базу и код, это отдельная огромная тема, но расскажу основные аспекты того, как могло бы работать ваше API
1. Всегда контролируйте код ответа. Не допускайте, чтобы сервис отвечал "200 OK", но при этом в теле ответа был допустим JSON { status: "error" } или вообще пустой ответ
2. Используйте правильные методы передачи данных (GET - выборка, POST - создание чего-либо и добавление файлов, PATCH/PUT - обновление, DELETE - удаление), это поможет вам самим гораздо правильнее роутить ваше приложение, а также проще отслеживать запросы по типам, через любой лог коллектор. Допустим пришел к вам запрос в ТП: "Аааа удалили важные данные, но мы не знаем когда". А у вас в логах все как POST /api/1.0/entity/123, что в этот момент происходило обновление или удаление? От какого метки надо восстановить данные? Правильный метод передачи вам поможет найти место гораздо быстрее
3. Не придумывайте свой формат ответов, а используйте стандарты. Если мы рассматриваем именно JSON over HTTP (что по факту сейчас стандарт отрасли, хотя как по мне лучше бы был gRPC+protobuf), то для меня лично самый удобный формат - это HAL в случае успешного ответа и Problem detail в случае какой-либо ошибки. Но стоит обратить сразу внимание, что некоторые статусы ответа не должны вообще содержать body, такие как например "204 No content"
4. Приложение должны быть stateless. Всю необходимую информацию для получения верного контекста запроса приложение должно получить из того же JWT токена
5. Не делайте универсальных методов, выгружающих все и сразу (если конечно это не какой-нибудь экспортер), а делайте ссылки от одного элемента в другой (смотри HAL)
6. В случае, если контент обновляемый, то не забывайте про заголовок ETag или Last-Modified, чтобы у того, кто запрашивает было ясное понимание, обновились данные или нет и надо ли запускать какие-то процессы у себя. Также как и заголовок If-Modified-Since с правильным ответом поможет сторонним командам обуздать ваше API легко и непринужденно
7. Крайне желательно потратить время и заиметь свой OAuth2-сервер для авторизации сторонних приложений
8. Ответ от вашего метода GET должен приниматься вашим же PATCH, то есть: Стороннее приложение запрашивает GET /api/1.0/entity/1, получает данные, как-то их модифицирует и отправляет обратно туже структуру на PATCH /api/1.0/entity/1, все проходит успешно и все счастливы и никаких конвертаций
9. Поддерживайте версионность API, либо через ссылку /api/{VERSION} или через обязательный заголовок, это избавит вас от огромного геморроя в будущем
10. Если в ответе есть дата и время, либо явно указывайте часовой пояс и сдвиг, либо используйте timestamp и работайте с utc.
Самая успешная модель развития SaaS сервиса это наличие открытого API, так как именно оно помогает вашему сервису получить функции, которыми обладают другие и наоборот. Многие называют его REST API, сами правда не понимая, какие именно парадигмы и ограничения должны накладываться на такое API. За свою карьеру я поучаствовал во многих проектах и прорабатывал интеграции между различными сервисами или внутренними элементами системы (микросервисами). И к сожалению вынужден сказать, что подавляющее большинство разработчиков не считают необходимым посмотреть, а был ли уже изобретен велосипед до них и продолжают делать свои вариации протоколов взаимодействия с сервисом. Сказать по правде я и сам был таким, но возможно пост ниже поможет вам перешагнуть сразу через этот этап и открыть для себя стандарты.
💻 Разрабатывая API
Здесь я не буду писать о том, как надо проектировать базу и код, это отдельная огромная тема, но расскажу основные аспекты того, как могло бы работать ваше API
1. Всегда контролируйте код ответа. Не допускайте, чтобы сервис отвечал "200 OK", но при этом в теле ответа был допустим JSON { status: "error" } или вообще пустой ответ
2. Используйте правильные методы передачи данных (GET - выборка, POST - создание чего-либо и добавление файлов, PATCH/PUT - обновление, DELETE - удаление), это поможет вам самим гораздо правильнее роутить ваше приложение, а также проще отслеживать запросы по типам, через любой лог коллектор. Допустим пришел к вам запрос в ТП: "Аааа удалили важные данные, но мы не знаем когда". А у вас в логах все как POST /api/1.0/entity/123, что в этот момент происходило обновление или удаление? От какого метки надо восстановить данные? Правильный метод передачи вам поможет найти место гораздо быстрее
3. Не придумывайте свой формат ответов, а используйте стандарты. Если мы рассматриваем именно JSON over HTTP (что по факту сейчас стандарт отрасли, хотя как по мне лучше бы был gRPC+protobuf), то для меня лично самый удобный формат - это HAL в случае успешного ответа и Problem detail в случае какой-либо ошибки. Но стоит обратить сразу внимание, что некоторые статусы ответа не должны вообще содержать body, такие как например "204 No content"
4. Приложение должны быть stateless. Всю необходимую информацию для получения верного контекста запроса приложение должно получить из того же JWT токена
5. Не делайте универсальных методов, выгружающих все и сразу (если конечно это не какой-нибудь экспортер), а делайте ссылки от одного элемента в другой (смотри HAL)
6. В случае, если контент обновляемый, то не забывайте про заголовок ETag или Last-Modified, чтобы у того, кто запрашивает было ясное понимание, обновились данные или нет и надо ли запускать какие-то процессы у себя. Также как и заголовок If-Modified-Since с правильным ответом поможет сторонним командам обуздать ваше API легко и непринужденно
7. Крайне желательно потратить время и заиметь свой OAuth2-сервер для авторизации сторонних приложений
8. Ответ от вашего метода GET должен приниматься вашим же PATCH, то есть: Стороннее приложение запрашивает GET /api/1.0/entity/1, получает данные, как-то их модифицирует и отправляет обратно туже структуру на PATCH /api/1.0/entity/1, все проходит успешно и все счастливы и никаких конвертаций
9. Поддерживайте версионность API, либо через ссылку /api/{VERSION} или через обязательный заголовок, это избавит вас от огромного геморроя в будущем
10. Если в ответе есть дата и время, либо явно указывайте часовой пояс и сдвиг, либо используйте timestamp и работайте с utc.
Forwarded from CTO On Live
🏗 Архитектура API и велосипеды (ч.2) 🚲
11. По той же причине, что и в пункт 10 можно передавать обратно заголовок с используемой часовой зоной и текущим временем на сервере
12. Маркируйте ответ уникальным id в заголовке, чтобы было проще найти его в случае проблем
13. Крайне желательно отдавать реальное время отработки бекенда (можно также в заголовке) В этом случе риск, что к вам придут в ТП и будут говорить, что запрос долго отрабатывает (тогда как это не так) сойдут на нет.
14. Уберите из заголовков любое описание используемых технологий (заголовки Server/Powered-By) или же перебейте их кастомом
15. Лимитируйте запросы к API. Прекрасно для этих целей подходит nginx limit req module, а главное напишите это сразу в доку в ограничениях API
16. Исходя из пункта 15, не забудьте про документацию и пропишите регламент обновления документации по изменению API
17. Сделайте Zapier к своему сервису
На этому пока что всё, если у вас есть вопросы по теме, то всегда можете задать их мне лично @ea_realleo
🌐Ссылки по теме
- application/hal+json
- application/problem+json
- http status codes
- json web token
- ETag/Last-modified
- OAuth2
- ngx_http_limit_req_module
11. По той же причине, что и в пункт 10 можно передавать обратно заголовок с используемой часовой зоной и текущим временем на сервере
12. Маркируйте ответ уникальным id в заголовке, чтобы было проще найти его в случае проблем
13. Крайне желательно отдавать реальное время отработки бекенда (можно также в заголовке) В этом случе риск, что к вам придут в ТП и будут говорить, что запрос долго отрабатывает (тогда как это не так) сойдут на нет.
14. Уберите из заголовков любое описание используемых технологий (заголовки Server/Powered-By) или же перебейте их кастомом
15. Лимитируйте запросы к API. Прекрасно для этих целей подходит nginx limit req module, а главное напишите это сразу в доку в ограничениях API
16. Исходя из пункта 15, не забудьте про документацию и пропишите регламент обновления документации по изменению API
17. Сделайте Zapier к своему сервису
На этому пока что всё, если у вас есть вопросы по теме, то всегда можете задать их мне лично @ea_realleo
🌐Ссылки по теме
- application/hal+json
- application/problem+json
- http status codes
- json web token
- ETag/Last-modified
- OAuth2
- ngx_http_limit_req_module
How to develop Go gRPC microservice with HTTP/REST endpoint, middleware, Kubernetes deployment, etc.
- [Part 1] https://medium.com/@amsokol.com/tutorial-how-to-develop-go-grpc-microservice-with-http-rest-endpoint-middleware-kubernetes-daebb36a97e9
- [Part 2] https://medium.com/@amsokol.com/tutorial-how-to-develop-go-grpc-microservice-with-http-rest-endpoint-middleware-kubernetes-af1fff81aeb2
- [Part 3] https://medium.com/@amsokol.com/tutorial-part-3-how-to-develop-go-grpc-microservice-with-http-rest-endpoint-middleware-739aac8f1d7e
- [Part 4] TBD
Src: https://github.com/amsokol/go-grpc-http-rest-microservice-tutorial
#go #golang #grpc #microserivce #tutorial #github
- [Part 1] https://medium.com/@amsokol.com/tutorial-how-to-develop-go-grpc-microservice-with-http-rest-endpoint-middleware-kubernetes-daebb36a97e9
- [Part 2] https://medium.com/@amsokol.com/tutorial-how-to-develop-go-grpc-microservice-with-http-rest-endpoint-middleware-kubernetes-af1fff81aeb2
- [Part 3] https://medium.com/@amsokol.com/tutorial-part-3-how-to-develop-go-grpc-microservice-with-http-rest-endpoint-middleware-739aac8f1d7e
- [Part 4] TBD
Src: https://github.com/amsokol/go-grpc-http-rest-microservice-tutorial
#go #golang #grpc #microserivce #tutorial #github
Medium
[Tutorial, Part 1] How to develop Go gRPC microservice with HTTP/REST endpoint, middleware…
There are a lot of article how to create Go REST microservice using several great web frameworks and/or routers. I read most of them when I…
Forwarded from Мониторим ИТ
Одна из основных функций языка PromQL — агрегирование данных временных рядов в режиме реального времени. Эндрю Ньюдигейт, инженер в команде по инфраструктуре GitLab, рассказывает как этот язык можно использовать для обнаружения аномалий во временных рядах. А здесь можно посмотреть слайды презентации.
Forwarded from Технологический Болт Генона
Forwarded from Security Wine (бывший - DevSecOps Wine) (Denis Yakimov)
Безопасная разработка - подборка книг
Подписчиков за 3 месяца на канале стало заметно больше и уверен, что далеко не все успели отобрать для себя полезные книги отмеченные здесь как #literature. Самое время, чтобы вспомнить.
Безопасный DevOps. Эффективная эксплуатация систем - маст хэв для погружения в тему. Требует базовых знаний по DevOps и охватывает лишь небольшой стенд, но этого достаточно, чтобы повторить стенд у себя и разобраться, что к чему.
Agile Application Security. Enabling Security in a CD pipeline - отличная книга для погружения в организационные процессы. Можно заказать версию на русском языке.
DevOpsSec. Securing Software through Continuous Delivery - отличная вводная книга, где вы сможете прямо в PDF найти ссылки на различные инструменты и описание лучших практик
CSSLP - Certified Secure Software Lifecycle Profession - большой гайд для подготовки к экзамену от ISC2 по обеспечению безопасности SDLC.
Docker Security. Using Containers Safely in Production - обзор того, как защитить Docker
Kubernetes Security - обзор того, как защитить кластер
Epic Failures in DevSecOps. Volume 1 and 2 - если вы прочитали уже все книги, но у вас все равно куча вопросов, например, кто "вообще должен за все это отвечать", то книга может помочь ответить на некоторые вопросы
Building Web Apps that Respect a User’s Privacy and Security - про безопасность веба. Описание по ссылке.
#literature
Подписчиков за 3 месяца на канале стало заметно больше и уверен, что далеко не все успели отобрать для себя полезные книги отмеченные здесь как #literature. Самое время, чтобы вспомнить.
Безопасный DevOps. Эффективная эксплуатация систем - маст хэв для погружения в тему. Требует базовых знаний по DevOps и охватывает лишь небольшой стенд, но этого достаточно, чтобы повторить стенд у себя и разобраться, что к чему.
Agile Application Security. Enabling Security in a CD pipeline - отличная книга для погружения в организационные процессы. Можно заказать версию на русском языке.
DevOpsSec. Securing Software through Continuous Delivery - отличная вводная книга, где вы сможете прямо в PDF найти ссылки на различные инструменты и описание лучших практик
CSSLP - Certified Secure Software Lifecycle Profession - большой гайд для подготовки к экзамену от ISC2 по обеспечению безопасности SDLC.
Docker Security. Using Containers Safely in Production - обзор того, как защитить Docker
Kubernetes Security - обзор того, как защитить кластер
Epic Failures in DevSecOps. Volume 1 and 2 - если вы прочитали уже все книги, но у вас все равно куча вопросов, например, кто "вообще должен за все это отвечать", то книга может помочь ответить на некоторые вопросы
Building Web Apps that Respect a User’s Privacy and Security - про безопасность веба. Описание по ссылке.
#literature
Forwarded from Karim Iskakov - канал (Karim Iskakov)
This media is not supported in your browser
VIEW IN TELEGRAM
Avatarify: we adapted First Order Motion Model to Zoom/Skype calls. Now you can be Elon Musk or anybody you want!
▶️ Full: youtu.be/lONuXGNqLO0, Demo: youtu.be/Q7LFDT-FRzs
🌐 github.com/alievk/avatarify
👤 @alievk, @karfly
📉 @loss_function_porn
▶️ Full: youtu.be/lONuXGNqLO0, Demo: youtu.be/Q7LFDT-FRzs
🌐 github.com/alievk/avatarify
👤 @alievk, @karfly
📉 @loss_function_porn
Forwarded from Находки в опенсорсе
macos-like TimeMachine but for Linux!
It uses rsync to incrementally back up your data to a different directory, hard disk or remote server via SSH. All operations are incremental, atomic and automatically resumable.
The goal of this project is to have a cross-operating system and minimal as possible backup script that can be easily reviewed by anyone without great effort. Additionally it should provide one task only and do it well without the need of external requirements and only rely on default installed tools.
https://github.com/cytopia/linux-timemachine
#shell #devops
It uses rsync to incrementally back up your data to a different directory, hard disk or remote server via SSH. All operations are incremental, atomic and automatically resumable.
The goal of this project is to have a cross-operating system and minimal as possible backup script that can be easily reviewed by anyone without great effort. Additionally it should provide one task only and do it well without the need of external requirements and only rely on default installed tools.
https://github.com/cytopia/linux-timemachine
#shell #devops
Forwarded from Эффект пентестера
Курс по Burp Suite
Burp Suite - это платформа, предназначенная для проведения атак на веб-приложения. Она включает в себя разнообразные утилиты с специально спроектированными интерфейсами, позволяющими улучшить и ускорить процесс атаки. Все эти инструменты основываются на мощном фреймворке, который позволяет им перехватывать и показывать пользователю HTTP-сообщения, работать с аутентификацией, прокси-серверами и производить логирование различных данных. Ниже курс на английском для новичков.
https://www.youtube.com/watch?v=udl4oqr_ylM&list=PLq9n8iqQJFDrwFe9AEDBlR1uSHEN7egQA
#burp #course
Burp Suite - это платформа, предназначенная для проведения атак на веб-приложения. Она включает в себя разнообразные утилиты с специально спроектированными интерфейсами, позволяющими улучшить и ускорить процесс атаки. Все эти инструменты основываются на мощном фреймворке, который позволяет им перехватывать и показывать пользователю HTTP-сообщения, работать с аутентификацией, прокси-серверами и производить логирование различных данных. Ниже курс на английском для новичков.
https://www.youtube.com/watch?v=udl4oqr_ylM&list=PLq9n8iqQJFDrwFe9AEDBlR1uSHEN7egQA
#burp #course
YouTube
Learn Burp Suite, the Nr. 1 Web Hacking Tool - 02 - General Concept
Full training is available for free at:
http://hackademy.aetherlab.net
In this lecture we will cover the general concept of the Burp Proxy. I will explain how the test architecture works and we will discuss the basics of the Burp Suite.
Website: http://aetherlab.net…
http://hackademy.aetherlab.net
In this lecture we will cover the general concept of the Burp Proxy. I will explain how the test architecture works and we will discuss the basics of the Burp Suite.
Website: http://aetherlab.net…
Forwarded from The Devs
Forwarded from 🇺🇦 Go for two :)
Note #64 New net/url.URL.Redacted method in go 1.15
В Go1.15 появится удобный метод
Links:
[1] https://go-review.googlesource.com/c/go/+/207082/
В Go1.15 появится удобный метод
net/url.URL.Redacted
[1], по сути, похож на url.URL.String()
, только заменяет пароли на xxxxxxx
, будет удобно для логирования:package main
import (
"fmt"
"net/url"
)
func main() {
u := &url.URL{
Scheme: "https",
User: url.UserPassword("user", "password"),
Host: "example.com",
Path: "foo/bar",
}
fmt.Println(u.Redacted())
u.User = url.UserPassword("me", "newerPassword")
fmt.Println(u.Redacted())
}
// gotip run main.go
// https://user:xxxxx@example.com/foo/bar
// https://me:xxxxx@example.com/foo/bar
Links:
[1] https://go-review.googlesource.com/c/go/+/207082/
Forwarded from oleg_log (Oleg Kovalov)
Не опоздал, а дал возможность еще каналов довести.
@overtimehate - хороший технический блог
@rxd_txd - и еще один не хуже!
@numstation - научные штучки и мемы)
@count0_digest & @sysadmin_tools - 2 канала, без которых я не могу жить
@experimentalchill - непревзойденные канал Даниила о С++
@sysadminsu - админские полезняшки
@bpblog - сочные кастомные клавиатуры
@some_link_here - полезные и интересные айти ссылки
@meta_it - сборник айти-каналов (хотя большинство я вам озвучил)
@sec_devops - и сюда же secure devops, как же без безопасности в докере?
@dereference_pointer_there - если интересен Rust и о его непопулярных вещах.
@software_engineering_blogs - лента постов от известных фирм, чем-то напоминает HN comments @hn_best_comments (от @korkoma)
@isast - анализ и сертификация безопасности приложений в промышленных масштабах
@golangquiz & @quizcpp - если хотите потестить свои скилы в Go и С++
@alexandersmind - личный айти бложек
@smmblog - на стыке IT и предпринимательства, продуктовая, предпринимательская сторона работы.
@pdp11ml - Domain Specific Computing for machine learning (хотя там кроме МЛ есть вещи)
@coderoll - о веб-разработке
@qtasep - о жизни и непонятной математике
@lowlyingscience - science 👌
@microservices_arch — канал называется микросервисы, но целом по архитектуре.
@dddevotion — канал про ДДД
@pathetic_low_freq - известные, но "жалкие" низкочастотники
Давайте, репостите!
@overtimehate - хороший технический блог
@rxd_txd - и еще один не хуже!
@numstation - научные штучки и мемы)
@count0_digest & @sysadmin_tools - 2 канала, без которых я не могу жить
@experimentalchill - непревзойденные канал Даниила о С++
@sysadminsu - админские полезняшки
@bpblog - сочные кастомные клавиатуры
@some_link_here - полезные и интересные айти ссылки
@meta_it - сборник айти-каналов (хотя большинство я вам озвучил)
@sec_devops - и сюда же secure devops, как же без безопасности в докере?
@dereference_pointer_there - если интересен Rust и о его непопулярных вещах.
@software_engineering_blogs - лента постов от известных фирм, чем-то напоминает HN comments @hn_best_comments (от @korkoma)
@isast - анализ и сертификация безопасности приложений в промышленных масштабах
@golangquiz & @quizcpp - если хотите потестить свои скилы в Go и С++
@alexandersmind - личный айти бложек
@smmblog - на стыке IT и предпринимательства, продуктовая, предпринимательская сторона работы.
@pdp11ml - Domain Specific Computing for machine learning (хотя там кроме МЛ есть вещи)
@coderoll - о веб-разработке
@qtasep - о жизни и непонятной математике
@lowlyingscience - science 👌
@microservices_arch — канал называется микросервисы, но целом по архитектуре.
@dddevotion — канал про ДДД
@pathetic_low_freq - известные, но "жалкие" низкочастотники
Давайте, репостите!
Another one online yaml converter...
https://onlineyamltools.com/
#yaml #json #xml #csv #tsv #base64 #converter #online
https://onlineyamltools.com/
#yaml #json #xml #csv #tsv #base64 #converter #online
Onlineyamltools
Online YAML Tools - Simple, free and easy to use YAML utilities
World's simplest collection of useful YAML utilities. Convert YAML to XML, JSON, TSV and CSV. Validate, prettify, minify, highlight, edit YAML, and more.