Демистификация совместного использования ресурсов между источниками (CORS): комплексное руководство

Обмен ресурсами между источниками (CORS) – это критически важный механизм безопасности, который позволяет веб-браузерам безопасно взаимодействовать с ресурсами из разных источников. В этой статье блога мы углубимся в спецификацию W3C CORS и рассмотрим различные методы реализации CORS в ваших веб-приложениях. От простых конфигураций до сложных методов — мы предоставим примеры кода, иллюстрирующие каждый подход.

  1. Конфигурация на стороне сервера.
    Первый метод включает настройку сервера для включения необходимых заголовков CORS в его ответы. Вот пример использования Node.js и Express:
const express = require('express');
const app = express();
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  next();
});
// ... Rest of your server code
app.listen(3000, () => {
  console.log('Server started on port 3000');
});
  1. Предварительные запросы.
    В некоторых случаях браузеры отправляют предварительные запросы, чтобы проверить, безопасно ли отправлять конкретный запрос. Вот пример обработки предполетного запроса с использованием Node.js и Express:
app.options('/api/data', (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.sendStatus(204);
});
app.post('/api/data', (req, res) => {
  // Handle the actual request
});
  1. Прокси-серверы.
    Другой подход — использовать прокси-сервер для обхода ограничений CORS. Вы можете создать конечную точку на стороне сервера, которая будет выступать в качестве посредника между клиентом и целевым сервером. Вот пример использования Node.js и библиотеки http-proxy-middleware:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use(
  '/api',
  createProxyMiddleware({
    target: 'https://api.example.com',
    changeOrigin: true,
  })
);
app.listen(3000, () => {
  console.log('Proxy server started on port 3000');
});

Правильная реализация CORS имеет решающее значение для обеспечения безопасности и целостности ваших веб-приложений. В этой статье мы рассмотрели различные методы включения CORS, включая настройку на стороне сервера, обработку предполетных запросов и использование прокси-серверов. Понимая и применяя эти методы, вы можете гарантировать, что ваши приложения беспрепятственно взаимодействуют с ресурсами из разных источников, сохраняя при этом потенциальные угрозы безопасности.

Не забудьте тщательно протестировать и проверить конфигурации CORS перед их развертыванием в производственных системах. Будьте в курсе последних рекомендаций и рекомендаций по безопасности, чтобы обеспечить безопасность и надежность работы пользователей.