Nginx

Как да използваме CORS с Nginx

Как да използваме CORS с Nginx

Какво е CORS

CORS, известен също като кръстосано споделяне на ресурси е техника, използвана в съвременните уеб браузъри, която контролира достъпа до ресурси, хоствани в уеб сървър. CORS използва допълнителни заглавки като origin, access-control-origin и много други, за да определи дали заявеният ресурс има разрешение за изпращане до браузъра. Основната цел на CORS е да попречи на уеб приложение, работещо в уеб браузър, да има достъп до ресурси, хоствани от различен произход, когато няма разрешение, което означава, че уеб приложението не може да изтегля ресурси, като изображения, скриптове, css като всяко съдържание и т.н. когато не се хостват в един и същ произход (обикновено всички трябва да са в един и същ домейн) като уеб приложението, освен ако сървърът не е конфигуриран да позволява това поведение. Като разполагат с това внедряване в уеб браузър, потребителите могат да защитят данните си от неупълномощени страни. Хакерът може тайно да модифицира уеб страница, докато е в средата на връзката, за да наруши бизнеса на потребителя или да получи достъп до ценни данни. Има обаче и предимства на CORS, като позволява на разработчиците да зареждат ресурси от различен произход поради ефективност на разходите или просто удобство. В този случай те трябва да модифицират своя уеб сървър, за да разрешат такива заявки. Тази статия показва как лесно да го направите на уеб сървър на Nginx.

Какво задейства CORS заявка

Не всички заявки задействат CORS заявка, тъй като обикновено ресурсите се хостват в същия произход като уеб приложението. Ако е различно, тогава се задейства CORS. CORS има два вида заявки, проста заявка и CORS предварително изведена заявка.

Simple Request работи като обикновена заявка, уеб браузърът изпраща заявка до сървъра за изтегляне на определен ресурс, когато потребителят го е инициирал, след което уеб сървърът проверява произхода на заявката, сравнява я с правилата в уеб сървъра, ако е съответства, ресурсът се предоставя. Този тип заявка използва заглавки OIRIGN и ACCESS-CONTROL-ALLOW-ORIGIN, за да определи дали ресурсът трябва да бъде предоставен или не. Опростената заявка се задейства само ако се използват методи за заявка като GET, HEAD, POST и се използват заглавки като Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-Width, Width. Дори тогава не всички типове съдържание предизвикват проста заявка. Тук само типовете кодиране на форми задействат проста заявка.

Видът на предварително зададената заявка е доста различен, тъй като няма пряк достъп до ресурсите в първия кръг. Когато горепосочените условия се променят по някакъв начин, или чрез използване на различен заглавие на заявка или различен тип съдържание, се задейства предварително зададена заявка. В предварително зададени заявки уеб браузърът първо се уверява, че има достъп до ресурса, като комуникира с уеб браузъра, след това, когато уеб браузърът отговори с добре (HTTP 200) отговор, след това изпраща нова заявка за изтегляне на ресурса. Той използва HTTP OPTION метод за заявка, за да инициира първата заявка, след това използва GET, POST като типове заявки, за да изтегли ресурсите.

Как да конфигурирам Nginx да поддържа заявки за CORS

Този раздел демонстрира как да конфигурирате уеб сървър на nginx, за да позволи споделяне на ресурси с различни източници. Това може да се направи само ако разработчикът има достъп до уеб сървъра, тъй като включва промяна на конфигурационния файл на Nginx.

Използвайте следния прост кодов фрагмент, за да разрешите CORS заявки. Това трябва да бъде копирано в файла по подразбиране на услугата nginx в Ubuntu или друга платформа.

местоположение \
if ($ request_method = 'OPTIONS')
add_header 'Access-Control-Allow-Origin' 'https: // localhost;
add_header 'Access-Control-Allow-Methods "POST, OPTIONS";
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Тип съдържание "text / plain; charset = utf-8';
връщане 204;

ако ($ request_method = 'POST')
add_header 'Access-Control-Allow-Origin "https: // localhost;
add_header 'Access-Control-Allow-Methods' 'POST';

Основният кодов фрагмент върви както по-горе. Той съдържа директиви като request_method, add_header за идентифициране на типа на заявката и задаване на заглавката на отговора за браузъра да чете съответно. Заглавката Access-control-allow-origin определя до кой произход има достъп ресурсът, например ако уеб приложение, хоствано в github, иска да получи достъп до изображение, хоствано в myOwnServer.com, тогава URL адресът на github трябва да се използва като стойността на директивата Access-control-allow-origin в myOwnServer.com, след това, когато уеб приложението, хоствано в github, изпраща заявки до myOwnServer.com, за да изтеглите файла с изображението, на всички изискани се дава разрешение. Заглавката Access-control-allow-method определя какви типове заявки поддържа уеб приложението, което изпраща заявките, след което останалите заглавки са за максималната си възраст за кеширане на заявките и поддържания тип съдържание.

Както е описано по-горе, след като заявката OPTION е завършена, браузърът изпраща друга заявка за изтегляне на ресурсите, ако първата заявка е била успешна, заглавките му се задават в първия request_method ако скоби.

Освен гореспоменатите директиви, в Nginx има някои други важни директиви, които могат да се използват в заявките за CORS. Една от най-важните директиви е access-control-allow-headers, това, което прави, е да зададе заглавката на отговора с разрешени имена на заглавки за браузъра, за да се провери. Уеб приложението може да има свои собствени заглавки за различни цели и ако такива заглавия присъстват в следващите заявки след първоначалната заявка OPTIONS, тогава всички тези заглавки трябва да бъдат разрешени от уеб сървъра преди исканият ресурс да бъде споделен.

Важно е този кодов фрагмент да бъде на правилното място в файла по подразбиране на Nginx, защото Nginx изпълнява различни блокове за местоположение в зависимост от съответстващия URL адрес, ако такъв блок за местоположение не съдържа този кодов фрагмент, той изобщо не се изпълнява, и затова е важно да използвате това във всички блокове за местоположение за безопасна страна. Някои от важните блокове за местоположение са Images, PHP (~ \.php $), CSS и т.н. ... блокове.

След като гореспоменатият кодов фрагмент бъде запазен, запазете файла Nginx и презаредете услугата Nginx, за да влязат в сила промени.

Заключение

CORS е известен като кръстосано споделяне на ресурси и е техника за контрол на достъпа до ресурси. Тези ресурси могат да бъдат всеки файл от изображение до javascript файл. Основната цел на CORS е да засили сигурността на уеб приложенията, за да предотврати атаките на човек в средата. CORS обаче може да има и ползи. В този случай CORS трябва да бъде включен, тъй като не е разрешен по подразбиране. Основният тип заявка CORS е прост тип заявка, той използва само директиви ORIGIN и ACCESS-CONTROL-ALLOW-ORIGIN и с тази помощ Nginx може да даде разрешение на уеб браузъра за достъп до искания ресурс в зависимост от произхода. Така или иначе CORS е доста полезен и трябва да се използва внимателно.

Как да промените левия и десния бутон на мишката на компютър с Windows 10
Напълно нормално е всички устройства на компютърни мишки да са ергономично проектирани за десничари. Но има налични устройства за мишка, които са спец...
Емулирайте кликванията на мишката, като задържите курсора на мишката с кликаща мишка в Windows 10
Използването на мишка или клавиатура в неправилна поза при прекомерна употреба може да доведе до много здравословни проблеми, включително напрежение, ...
Добавете жестове на мишката към Windows 10, като използвате тези безплатни инструменти
През последните години компютрите и операционните системи значително се развиха. Имаше време, когато потребителите трябваше да използват команди за на...