# Semgrep

**Название задания в Auditor**: Semgrep, Gitlab Semgrep, Gitlab Php\
**Образ в Auditor:** `registry.cybercodereview.ru/cybercodereview/security-images/semgrep:1.99.0`; `registry.cybercodereview.ru/cybercodereview/security-images/semgrep-sast-gitlab:4`\
**Название импортера в Security Center**: Semgrep JSON Report, [GitLab Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep)

[Semgrep](https://github.com/semgrep/semgrep) поддерживает ряд языков программирования, таких как:

* Python
* JavaScript
* Java
* Go
* Ruby
* TypeScript
* C#
* Kotlin
* PHP
* Swift

Semgrep можно использовать для проверки на наличие таких проблем безопасности, как:

* SQL-инъекции
* Межсайтовый скриптинг (XSS)
* Инъекция команд
* Проблемы аутентификации и авторизации
* Небезопасная криптография
* Инъекция кода
* Обход путей
* Включение файлов
* Утечка информации
* Инъекция внешних сущностей XML (XXE)
* Подделка запросов на стороне сервера (SSRF)
* и другие

Интересной особенностью Semgrep является его способность обнаруживать проблемы безопасности в **сложных кодовых базах**. Он использует мощный механизм сопоставления шаблонов для выявления уязвимостей и является очень настраиваемым.

**Пример команды Curl**

```
curl -X POST localhost/api/v1/scan/import/ -H "Authorization: Token a75bb26171cf391671e67b128bfc8ae1c779ff7b" -H "Content-Type: multipart/form-data" -F "file=@./" -F "product_name=Product1" -F "product_type=Application" -F "scanner_name=Semgrep JSON Report" -F "branch=dev" -F "repository=git@gitlab.cybercodereview.ru:cybercodereview/security-center.git"
```

В этой команде используются следующие параметры:

1. `-X POST`: задает используемый метод HTTP (в данном случае POST).
2. `-H "Authorization: Token <authorization_token>"`: задает [**токен авторизации**](https://docs.cybercodereview.ru/security-center/importing-reports-from-scanners-to-security-center#token-avtorizacii), полученный от Security Center.
3. `-H "Content-Type: multipart/form-data"`: задает тип содержимого запроса.
4. `-F "file=@<report_file_path>"`: задает **путь к файлу отчета**, создаваемого сканером.
5. `-F "product_name=<product_name>"`: задает **название** сканируемого **продукта**.
6. `-F "product_type=<product_type>"`: задает  **тип** сканируемого **продукта**.
7. `-F "scanner_name=<scanner_name>"`: задает **имя сканера**, используемого для создания отчета (Bandit Scan или GitLab Bandit)
8. `-F "branch=<branch_name>"`: (*необязательно*) указывает имя ветки в репозитории исходного кода (если применимо). Этот параметр особенно полезен, когда вы хотите связать результаты сканирования с определенной веткой в вашем репозитории. Если параметр не указан, сканирование будет связано с веткой по умолчанию

Информация об активах, если используется [Auditor](https://docs.cybercodereview.ru/auditor)

1. `-F "repository=<repository SSH URL>"`: Если ваш продукт хранится в **репозитории**, введите адрес **репозитория** в определенном формате, например: <git@gitlab.cybercodereview.ru>:cybercodereview/security-center.git
2. `-F "docker_image=<registry address>"`: Если ваш продукт является **образом**, введите адрес **реестра**, в котором находится ваш продукт, например: registry.cybercodereview\.ru/cybercodereview/security-center/back/importer:latest
3. `-F "domain=<domain>"`: Если ваш продукт является **веб-продуктом**, введите **доменное имя** вашего продукта, например: cybercodereview\.ru
4. `-F "host=<host>"`: Если ваш продукт является **веб-продуктом**, введите **IP-адрес** вашего продукта, например: 0.0.0.0

**Пример отчета:**

<figure><img src="https://630546901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F31dcCQWMOu1AiZEAFiOT%2Fuploads%2FyjIGqMYZt0Um67RmpGuJ%2Fimage.webp?alt=media&#x26;token=9c8208c9-47c7-4f16-a921-015dd7905647" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cybercodereview.ru/security-center/scanners/scanner-description/code-scanners/semgrep.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
