API Security Checklist: README bg

[English](./README.md) | [繁中版](./README-tw.md) | [简中版](./README-zh.md) | [العربية](./README-ar.md) | [Azərbaycan](./README-az.md) | [বাংলা](./README-bn.md) | [Català](./README-ca.md) | [Čeština](./README-cs.md) | [Deutsch](./README-de.md) | [Ελληνικά](./README-el.md) | [Español](./README-es.md) | [فارسی](./README-fa.md) | [Français](./README-fr.md) | [हिंदी](./README-hi.md) | [Indonesia](./README-id.md) | [Italiano](./README-it.md) | [日本語](./README-ja.md) | [한국어](./README-ko.md) | [ພາສາລາວ](./README-lo.md) | [Македонски](./README-mk.md) | [മലയാളം](./README-ml.md) | [Монгол](./README-mn.md) | [Nederlands](./README-nl.md) | [Polski](./README-pl.md) | [Português (Brasil)](./README-pt_BR.md) | [Русский](./README-ru.md) | [ไทย](./README-th.md) | [Türkçe](./README-tr.md) | [Українська](./README-uk.md) | [Tiếng Việt](./README-vi.md)

# Контролен списък за сигурност на API

Контролен списък с най-важните контрамерки за сигурност при проектиране, тестване и пускане на вашето API.

---

## Удостоверяване

- [ ] Не използвайте `Basic Auth`. Използвайте стандартно удостоверяване.
- [ ] Не преоткривайте нови начини за `удостоверяване`, `генериране на токени`, `съхранение на пароли`. Придържайте се към стандартите.
- [ ] Използвайте `Max Retry` и jail функции по време на удостоверяване.
- [ ] Използвайте криптиране на всички чувствителни данни.

## Достъп

- [ ] Задайте ограничение за броя на заявките в минута (Throttling, RPM-Limit), за да избегнете DDoS / Brute Force атаки.
- [ ] Използвайте HTTPS, от страната на сървъра, с TLS 1.2+ и сигурни шифри, за да избегнете MITM (Man in the Middle атака).
- [ ] Използвайте заглавката `HSTS` (HTTP Strict Transport Security) със SSL, за да избегнете SSL Strip атаки.
- [ ] Изключете списъците с директории.
- [ ] За частни API, разрешете достъп само от IP адреси/хостове в белия списък.

## Упълномощаване

### OAuth

- [ ] Винаги проверявайте `redirect_uri`, от страната на сървъра, за да разрешите само URL адреси от белия списък.
- [ ] Винаги се опитвайте да използвате еднократен код вместо токени (не използвайте `response_type=token`).
- [ ] Използвайте параметъра `state` с произволен хеш, за да предотвратите CSRF в процеса на OAuth удостоверяване.
- [ ] Определете обхват по подразбиране и проверете настройките за всяко приложение.

## Заявка

- [ ] Използвайте подходящият HTTP метод според операцията: `GET (четене)`, `POST (създаване)`, `PUT/PATCH (замяна/актуализация)` и `DELETE (изтриване)` и също отговорете с `405 Method Not Allowed` ако заявеният метод не е подходящ за искания ресурс.
- [ ] Валидирайте `типа данни (content-type)` в заглавката `Accept` (Content Negotiation), за да позволите само поддържани формати (например: `application/xml`, `application/json` и т.н.) и отговорете с `406 Not Acceptable`, ако типът не се поддържа.
- [ ] Валидирайте `типа данни (content-type)`, които получавате (например: `application/x-www-form-urlencoded`, `multipart/form-data`, `application/json` и т.н.).
- [ ] Валидирайте въведеното от потребителя, за да избегнете често срещани уязвимости (например: `XSS`, `SQL-Injection`, `Remote Code Execution`и т.н.).
- [ ] Не споделяйте чувствителни данни (`идентификационни данни`, `пароли`, `токени` или `API ключове`) в URL адреса, вместо това използвайте стандартната заглавка `Authorization`.
- [ ] Използвайте само криптиране от страна на сървъра.
- [ ] Използвайте API шлюз за ​​да конфигурирате кеширане, ограничаване на заявките (например: `Quota`, `Spike Arrest` или `Concurrent Rate Limit`) и динамично внедряване на API.

## Обработка

- [ ] Проверете, дали всички крайни точки са защитени чрез удостоверяване, за да избегнете прекъсване на процеса на удостоверяване.
- [ ] Идентификаторът на собствен ресурс на потребителя, трябва да се избягва. Използвайте `/me/orders`, вместо `/user/654321/orders`
- [ ] Не използвайте автоматично нарастване за ID. Вместо това използвайте `UUID`.
- [ ] Ако анализирате XML файлове, уверете се, че анализът на обект е изключен, за да избегнете `XXE` (XML external entity).
- [ ] Ако анализирате XML, YAML или друг език с котви и препратки, уверете се, че разширяването на обекта е изключено, за да избегнете `Billion Laughs/XML bomb` чрез атака с експоненциално разширяване на обект.
- [ ] Използвайте CDN за качване на файлове.
- [ ] Ако имате работа с огромно количество данни, използвайте Workers и Queues, за да обработите колкото е възможно повече, във фонов режим, и да върнете отговор бързо, за да избегнете HTTP блокиране.
- [ ] Не забравяйте да изключите режима DEBUG.
- [ ] Използвайте неизпълними стекове, когато има такива.

## Отговор

- [ ] Изпратете заглавката `X-Content-Type-Options: nosniff`.
- [ ] Изпратете заглавката `X-Frame-Options: deny`.
- [ ] Изпратете заглавката `Content-Security-Policy: default-src 'none'`.
- [ ] Премахнете заглавките, които биха могли да помогнат на атакуващ да провери вашия ресурс за уязвимости - `X-Powered-By`, `Server`, `X-AspNet-Version`и т.н.
- [ ] Фиксирайте `content-type` за вашия отговор. Ако изпращате отговор `application/json`, то тогава заявката трябва да бъде в `application/json`
- [ ] Do not return overly specific error messages to the client that could reveal implementation details, use generic messages instead, and log detailed information only on the server side.
- [ ] Не изпращайте в отговорите чувствителни данни като `идентификационни данни`, `пароли` или `токени`.
- [ ] Върнете правилния код на състоянието въз основа на резултатите от операцията. (например: `200 OK`, `400 Bad Request`, `401 Unauthorized`, `405 Method Not Allowed` и т.н.).

## Непрекъсната интеграция и непрекъсната доставка (CI & CD)

- [ ] Одитирайте вашия дизайн и внедрете модулни/интеграционни тестове.
- [ ] Използвайте процес за преглед на кода (Code Review). Не се самоодобрявайте (no Self-Approval).
- [ ] Уверете се, че вашето приложение е сканирано с антивирусен софтуер, преди да бъде пуснато в производство, включително библиотеки и други зависимости.
- [ ] Непрекъснато провеждайте тестове за сигурност (статичен/динамичен анализ) на вашия код.
- [ ] Проверете вашите зависимости (както софтуер, така и операционна система) за известни уязвимости.
- [ ] Проектирайте решение за бързо връщане към предишната версия.

## Мониторинг

- [ ] Използвайте централизирани входове за всички услуги и компоненти.
- [ ] Използвайте агенти, за да наблюдавате целия трафик, грешки, заявки и отговори.
- [ ] Използвайте известия за SMS, Slack, имейл, Telegram, Kibana, Cloudwatch и др.
- [ ] Уверете се, че не регистрирате чувствителни данни като кредитни карти, пароли, ПИН кодове и др.
- [ ] Използвайте IDS и/или IPS система за наблюдение на заявки и екземпляри на API.

---

## Вижте също:

- [yosriady/api-development-tools](https://github.com/yosriady/api-development-tools) - Колекция от полезни ресурси за създаване на RESTful HTTP+JSON API.
- You don't need JWT, just use a randomly generated API key. If you need asymmetric encryption or tamper prevention, [here are some alternative