Вопрос или проблема
Я создал андроид-приложение, которое хочу добавить в Play Store. Оно должно взаимодействовать с отдельным бэкендом на Typescript.
По соображениям безопасности я добавил белый список CORS. Обычно я просто добавляю источники в белый список, скажем, facebook.com, но для приложения у меня нет идеи, как это сделать.
Я хочу отправлять GET и POST запросы на этот размещенный бэкенд.
Я пытался искать решение этой проблемы, но меня сбивает с толку жаргон. Я новичок в этом, и это приложение было написано с использованием Ionic. Ранее я создавал приложения с помощью Node.js, но никогда не делал мобильное приложение.
Вам не следует полагаться на CORS для обеспечения безопасности. CORS имеет значение только для браузеров — андроид-приложения полностью обходят CORS (если только приложение не является веб-браузером).
Лучший вариант — потребовать API-ключ на вашем сервере, а затем включить этот ключ в исходный код вашего приложения. Вы не сможете полностью скрыть этот ключ, но это лучше, чем оставлять его полностью открытым.
Ответ или решение
Создание Android-приложения, которое будет взаимодействовать с вашим backend, требует особого внимания к вопросам безопасности, особенно когда речь идет о CORS и авторизации. Давайте разберем, как правильно организовать взаимодействие между вашим приложением и сервером с TypeScript.
Во-первых, важно понимать, что CORS (Cross-Origin Resource Sharing) действует только в браузерах. Если ваше Android-приложение не является встроенным веб-браузером, то оно не будет подвержено ограничениям CORS. Это означает, что вы не обязаны добавлять URL вашего Android-приложения в белый список CORS на вашем сервере.
Вместо полагания на CORS, вам следует рассмотреть другие схемы безопасности:
-
Использование API ключа:
- Генерируйте уникальный API ключ для вашего приложения. Этот ключ будет использоваться для аутентификации при запросах к вашему серверу.
- Включите этот ключ в запросы, отправляемые с вашего Android-приложения.
- Хотя нельзя полностью скрыть этот ключ (так как его можно найти в исходном коде приложения), его использование все же обеспечит определенный уровень защиты.
-
OAuth 2.0:
- Если ваше приложение требует более сложной аутентификации, вы можете рассмотреть возможность использования протокола OAuth 2.0. Это обеспечит возможность безопасной передачи токенов и позволит вашим пользователям аутентифицироваться через существующие учетные записи.
-
Шифрование данных:
- Используйте HTTPS для всех запросов от приложения к серверу. Это защитит ваши данные от перехвата третьими лицами.
- Вы можете также рассмотреть возможность шифрования чувствительных данных, таких как пользовательские учетные записи или подробности платежей, прежде чем отправлять их на сервер.
-
Мониторинг и ограничение запросов:
- На вашем сервере реализуйте механизмы мониторинга и ограничения количества запросов от одного API ключа. Это поможет защититься от злоумышленников, которые могут попытаться использовать ваш API ключ для выполнения злоумышленной активности.
-
Регулярные обновления:
- Обеспечьте регулярное обновление вашего приложения и сервера для устранения возможных уязвимостей. Изучайте лучшие практики безопасности и следите за их реализацией.
Для реализации API ключа, вы можете сделать следующее в вашем TypeScript backend:
import express from 'express';
const app = express();
const API_KEY = 'ваш_секретный_ключ';
// Middleware для проверки API ключа
app.use((req, res, next) => {
const apiKey = req.header('x-api-key');
if (apiKey && apiKey === API_KEY) {
next();
} else {
res.status(403).send('Доступ запрещен: неверный API ключ.');
}
});
// Остальные роуты вашего API
app.get('/api/endpoint', (req, res) => {
res.send('Доступ к API разрешен!');
});
// Запуск сервера
app.listen(3000, () => {
console.log('Сервер запущен на порту 3000');
});
Таким образом, несмотря на то, что ваше приложение будет работать на Android и свободно от ограничений CORS, важно использовать другие методы безопасности, чтобы защитить ваш backend от несанкционированного доступа.