четверг, 4 мая 2023 г.

Выборка данных из CSV файла

Нужно обработать отчёт сканеров уязвимостей, который CI сохраняет в CSV и HTML. Внутри CSV файла есть следующие колонки

  • Scanner
  • Component
  • Package
  • Type
  • Vulnerability ID
  • Severity
  • Installed Version
  • Fixed Version

Нужно в CI показать краткий отчет со списком найденных уязвимостей, важностью и в каких компонентах есть данная уязвимость.

В процессе решения наткнулся на csvkit, который не только позволяет вывести CSV в виде отформатированной таблицы, но и выполнять SQL запросы

Например моя задача решается так

$ csvsql --query 'SELECT `Vulnerability ID`,`Severity`,GROUP_CONCAT(DISTINCT `Component`) AS Components FROM `report` GROUP BY `Vulnerability ID`,`Severity` ORDER BY `Severity`' report.csv  | csvlook
| Vulnerability ID | Severity | Components                          |
| ---------------- | -------- | ----------------------------------- |
| CVE-XXXX-XXXXX   | Critical | component8,component9,component10   |
| CVE-XXXX-XXXXX   | Critical | component6                          |
| CVE-XXXX-XXXXX   | Critical | component8,component9,component10   |
| CVE-XXXX-XXXXX   | Critical | component2,component6               |
| CVE-XXXX-XXXXX   | Critical | component2,component6               |
| CVE-XXXX-XXXXX   | Critical | component6                          |
| CVE-XXXX-XXXXX   | Critical | component8,component9,component10   |
| CVE-XXXX-XXXXX   | Critical | component8,component9,component10   |
| CVE-XXXX-XXXXX   | Critical | component6                          |
| CVE-XXXX-XXXXX   | Critical | component8,component9,component10   |
| CVE-XXXX-XXXXX   | Critical | component8,component9,component10   |
| CVE-XXXX-XXXXX   | High     | component6                          |
| CVE-XXXX-XXXXX   | High     | component6                          |
| CVE-XXXX-XXXXX   | High     | component8,component9,component10   |
| CVE-XXXX-XXXXX   | High     | component6                          |
| CVE-XXXX-XXXXX   | High     | component8,component9,component10   |
| CVE-XXXX-XXXXX   | High     | component8,component9,component10   |
| CVE-XXXX-XXXXX   | High     | component8,component9,component10   |

В примере использованы обфусцированные данные.

Комментариев нет:

Отправить комментарий