API-ключ является основным механизмом аутентификации при работе с HERE Maps API. Любой запрос к картографическим сервисам, геокодированию, маршрутизации, поиску объектов или другим компонентам платформы выполняется от имени проекта, которому принадлежит данный ключ.
Компрометация ключа приводит к ряду рисков:
Защита API-ключей является обязательной частью архитектуры любого веб-приложения, использующего HERE Maps.
После создания проекта в панели разработчика HERE выдается уникальный API Key.
Типичный пример подключения библиотеки:
<script src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
Инициализация платформы:
const platform = new H.service.Platform({
apikey: 'YOUR_API_KEY'
});
После этого ключ автоматически используется для взаимодействия с сервисами HERE.
В браузере невозможно полностью скрыть API-ключ.
Даже если код минифицирован:
const platform=new H.service.Platform({
apikey:"abc123xyz"
});
ключ остается доступным:
Поэтому защита API-ключа строится не на полном сокрытии, а на минимизации возможного ущерба.
Плохой пример:
const platform = new H.service.Platform({
apikey: 'A1B2C3D4E5F6'
});
Недостатки:
Плохой пример:
{
"apiKey": "A1B2C3D4E5F6"
}
Файл:
/public/config.json
будет доступен любому пользователю через браузер.
Плохой пример:
<meta name="here-api-key" content="A1B2C3D4E5F6">
Содержимое страницы легко просматривается через DevTools.
Наиболее распространенный способ управления конфигурацией — переменные окружения.
Пример для Vite:
VITE_HERE_API_KEY=YOUR_KEY
Использование:
const platform = new H.service.Platform({
apikey: import.meta.env.VITE_HERE_API_KEY
});
Пример для Webpack:
HERE_API_KEY=YOUR_KEY
const platform = new H.service.Platform({
apikey: process.env.HERE_API_KEY
});
Важно понимать, что после сборки приложения значение всё равно попадет в клиентский код.
Преимущество такого подхода заключается не в сокрытии ключа от пользователей, а в:
Файл:
.env
не должен попадать в систему контроля версий.
Пример .gitignore:
.env
.env.local
.env.production
.env.development
Частая ошибка:
git add .
git commit -m "Initial commit"
после чего ключ навсегда сохраняется в истории Git.
Даже удаление файла позже не гарантирует удаление ключа из истории репозитория.
Хорошей практикой считается использование отдельных ключей для разных сред.
Структура:
Development
Testing
Staging
Production
Пример:
VITE_HERE_API_KEY_DEV=...
VITE_HERE_API_KEY_STAGE=...
VITE_HERE_API_KEY_PROD=...
Преимущества:
Одним из наиболее эффективных механизмов защиты является ограничение использования ключа определёнными доменами.
Пример разрешенных источников:
https://example.com
https://www.example.com
https://app.example.com
Если злоумышленник скопирует ключ и попытается использовать его с другого сайта:
https://attacker-site.com
запросы будут отклоняться.
Подобная настройка значительно снижает вероятность успешного злоупотребления.
Наиболее безопасная архитектура предполагает перенос критически важных запросов на сервер.
Browser
|
| API Key
|
HERE API
Ключ доступен пользователю.
Browser
|
Backend
|
HERE API
В этом случае:
Пример на Node.js:
import express from 'express';
import fetch from 'node-fetch';
const app = express();
app.get('/api/geocode', async (req, res) => {
const query = req.query.q;
const response = await fetch(
`https://geocode.search.hereapi.com/v1/geocode?q=${query}&apiKey=${process.env.HERE_API_KEY}`
);
const data = await response.json();
res.json(data);
});
Ключ никогда не попадает в браузер.
Особенно рекомендуется серверная обработка для:
Клиентская часть должна получать уже готовые данные.
Даже хорошо защищенный ключ необходимо периодически менять.
Причины ротации:
Процесс выглядит следующим образом:
Старая схема:
Application -> KEY_A
Переходный этап:
Application -> KEY_A
Application -> KEY_B
После завершения:
Application -> KEY_B
Контроль активности API помогает выявлять утечки на ранних этапах.
Следует отслеживать:
Подозрительными признаками являются:
Обычно: 10 000 запросов/сутки
Сегодня: 500 000 запросов/сутки
или
Приложение работает в Казахстане
Запросы идут из десятков стран одновременно
Такие события требуют немедленной проверки ключа.
Современные CI/CD-процессы часто включают сканирование секретов.
Популярные инструменты:
GitLeaks
TruffleHog
GitGuardian
detect-secrets
Они анализируют:
Пример проверки:
gitleaks detect
Это позволяет обнаружить случайно опубликованный ключ до развертывания приложения.
Секреты не должны храниться в коде пайплайнов.
Плохой пример:
env:
HERE_API_KEY: A1B2C3D4E5F6
Правильный подход:
env:
HERE_API_KEY: ${{ secrets.HERE_API_KEY }}
Ключ хранится в защищенном хранилище платформы CI/CD.
Нежелательно встраивать ключ непосредственно в образ.
Плохой пример:
ENV HERE_API_KEY=A1B2C3D4E5F6
Безопаснее использовать переменные среды во время запуска контейнера:
docker run \
-e HERE_API_KEY=YOUR_KEY \
my-app
Или использовать менеджеры секретов.
В крупных проектах ключи обычно не хранятся в файлах
.env.
Применяются специализированные системы:
AWS Secrets Manager
Google Secret Manager
Azure Key Vault
HashiCorp Vault
Преимущества:
Типичный алгоритм реагирования:
Пример экстренной замены:
const platform = new H.service.Platform({
apikey: process.env.HERE_API_KEY_NEW
});
После подтверждения работоспособности старый ключ должен быть немедленно деактивирован.