Eesti

Avage CORS-i (päritoluülese ressursside jagamise) saladused ja õppige oma veebirakendustes turvaliselt lubama domeeniüleseid päringuid. See põhjalik juhend hõlmab kõike alates põhitõdedest kuni täiustatud seadistusteni, tagades sujuva ja turvalise suhtluse erinevate päritolude vahel.

CORS-i demüstifitseerimine: põhjalik juhend päritoluülese ressursside jagamise kohta

Tänapäeva ühendatud veebis peavad rakendused sageli pääsema juurde ressurssidele erinevatest päritoludest. Siin tulebki mängu päritoluülene ressursside jagamine (CORS). CORS on oluline turvamehhanism, mis reguleerib, kuidas veebibrauserid käsitlevad päringuid ühest päritolust (domeen, protokoll ja port) teise päritolusse. CORS-i mõistmine on iga veebiarendaja jaoks hädavajalik turvaliste ja funktsionaalsete veebirakenduste loomiseks.

Mis on sama päritolu poliitika?

Enne CORS-i süvenemist on oluline mõista sama päritolu poliitikat (SOP). SOP on veebibrauserites rakendatav fundamentaalne turvamehhanism. Selle eesmärk on takistada ühel veebisaidil olevatel pahatahtlikel skriptidel juurdepääsu teise veebisaidi tundlikele andmetele. Päritolu on määratletud protokolli (nt HTTP või HTTPS), domeeni (nt example.com) ja pordi numbri (nt 80 või 443) kombinatsiooniga. Kahte URL-i peetakse sama päritoluga, kui neil on sama protokoll, domeen ja port.

Näide:

SOP piirab skriptide juurdepääsu erineva päritoluga ressurssidele, välja arvatud juhul, kui selle lubamiseks on kehtestatud spetsiifilised meetmed, näiteks CORS.

Miks on CORS vajalik?

Kuigi sama päritolu poliitika on turvalisuse seisukohalt ülioluline, võib see olla ka piirav. Paljud kaasaegsed veebirakendused tuginevad andmete hankimisele erinevatest serveritest, näiteks API-dest või sisuedastusvõrkudest (CDN). CORS pakub kontrollitud viisi SOP leevendamiseks ja seaduslike päritoluüleste päringute lubamiseks, säilitades samal ajal turvalisuse.

Kujutage ette stsenaariumi, kus veebirakendus, mis asub aadressil http://example.com, peab hankima andmeid API serverist, mis asub aadressil http://api.example.net. Ilma CORS-ita blokeeriks brauser selle päringu SOP tõttu. CORS võimaldab API serveril selgesõnaliselt määrata, millised päritolud on lubatud selle ressurssidele juurde pääsema, võimaldades veebirakendusel korrektselt toimida.

Kuidas CORS töötab: põhitõed

CORS töötab läbi rea HTTP päiste, mida vahetatakse kliendi (brauseri) ja serveri vahel. Server kasutab neid päiseid, et teavitada brauserit, kas tal on lubatud taotletud ressursile juurde pääseda. Peamine kaasatud HTTP päis on Access-Control-Allow-Origin.

Stsenaarium 1: Lihtne päring

„Lihtne päring” on GET, HEAD või POST päring, mis vastab teatud kriteeriumidele (nt Content-Type päis on üks järgmistest: application/x-www-form-urlencoded, multipart/form-data või text/plain). Sel juhul saadab brauser päringu otse serverile ja server vastab Access-Control-Allow-Origin päisega.

Kliendi päring (saidilt http://example.com):

GET /data HTTP/1.1
Host: api.example.net
Origin: http://example.com

Serveri vastus (saidilt http://api.example.net):

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Content-Type: application/json

{
  "data": "Mõned andmed serverist"
}

Selles näites vastab server päisega Access-Control-Allow-Origin: http://example.com, mis näitab, et päringud saidilt http://example.com on lubatud. Kui päringu päritolu ei vasta Access-Control-Allow-Origin päise väärtusele (või kui päis puudub), blokeerib brauser vastuse ja takistab kliendipoolsel skriptil andmetele juurdepääsu.

Stsenaarium 2: Eelkontrolli päring (keerukamate päringute jaoks)

Keerukamate päringute puhul, näiteks need, mis kasutavad HTTP meetodeid nagu PUT, DELETE, või need, millel on kohandatud päised, teostab brauser „eelkontrolli” päringu, kasutades HTTP OPTIONS meetodit. See eelkontrolli päring küsib serverilt luba enne tegeliku päringu saatmist. Server vastab päistega, mis määravad, millised meetodid, päised ja päritolud on lubatud.

Kliendi eelkontrolli päring (saidilt http://example.com):

OPTIONS /data HTTP/1.1
Host: api.example.net
Origin: http://example.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header

Serveri vastus (saidilt http://api.example.net):

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Methods: GET, PUT, DELETE
Access-Control-Allow-Headers: X-Custom-Header, Content-Type
Access-Control-Max-Age: 3600

Päiste selgitus:

Kui serveri eelkontrolli vastus näitab, et päring on lubatud, jätkab brauser tegeliku päringu saatmisega. Vastasel juhul blokeerib brauser päringu.

Kliendi tegelik päring (saidilt http://example.com):

PUT /data HTTP/1.1
Host: api.example.net
Origin: http://example.com
X-Custom-Header: some-value
Content-Type: application/json

{
  "data": "Mõned uuendatavad andmed"
}

Serveri vastus (saidilt http://api.example.net):

HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com
Content-Type: application/json

{
  "status": "Andmed on edukalt uuendatud"
}

Levinud CORS-i päised

Siin on ülevaade peamistest CORS-i päistest, mida peate mõistma:

CORS erinevates serveripoolsetes keeltes

CORS-i rakendamine hõlmab tavaliselt teie serveripoolse rakenduse seadistamist sobivate CORS-i päiste saatmiseks. Siin on näiteid, kuidas seda teha erinevates keeltes ja raamistikes:

Node.js koos Expressiga

Saate kasutada cors vahevara paketti:

const express = require('express');
const cors = require('cors');

const app = express();

// Luba CORS kõikidele päritoludele (KASUTAGE TOODANGUS ETTEVAATLIKULT)
app.use(cors());

// Alternatiivselt seadistage CORS konkreetsete päritolude jaoks
// app.use(cors({
//   origin: 'http://example.com'
// }));

app.get('/data', (req, res) => {
  res.json({ message: 'See on CORS-toega kõikidele päritoludele!' });
});

app.listen(3000, () => {
  console.log('Server töötab pordil 3000');
});

Python koos Flaskiga

Saate kasutada Flask-CORS laiendust:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

# Alternatiivselt seadistage CORS konkreetsete päritolude jaoks
# CORS(app, resources={r"/api/*": {"origins": "http://example.com"}})

@app.route("/data")
def hello():
    return {"message": "See on CORS-toega kõikidele päritoludele!"}

if __name__ == '__main__':
    app.run(debug=True)

Java koos Spring Bootiga

Saate CORS-i oma Spring Boot rakenduses seadistada annotatsioonide või konfiguratsiooniklasside abil:

Annotatsioonide kasutamine:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin(origins = "http://example.com") // Luba päringud saidilt http://example.com
public class DataController {

    @GetMapping("/data")
    public String getData() {
        return "See on CORS-toega saidile http://example.com!";
    }
}

Konfiguratsiooni kasutamine:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/data")
                .allowedOrigins("http://example.com") // Luba päringud saidilt http://example.com
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*");
    }
}

PHP

 "See on CORS-toega saidile http://example.com!");
echo json_encode($data);
?>

CORS ja turvakaalutlused

Kuigi CORS võimaldab päritoluüleseid päringuid, on ülioluline seda turvaliselt rakendada. Siin on mõned olulised kaalutlused:

CORS-i probleemide tõrkeotsing

CORS-i probleemide silumine võib olla masendav. Siin on mõned levinud probleemid ja kuidas neid lahendada:

Silumistööriistad:

Täiustatud CORS-i stsenaariumid

Kuigi CORS-i põhikontseptsioonid on suhteliselt lihtsad, on ka mõningaid täiustatud stsenaariume, mida kaaluda:

CORS-i parimad praktikad

Turvalise ja tõhusa CORS-i rakendamise tagamiseks järgige neid parimaid praktikaid:

Kokkuvõte

CORS on oluline turvamehhanism, mis võimaldab kontrollitud päritoluüleseid päringuid veebirakendustes. CORS-i toimimise ja selle õige seadistamise mõistmine on iga veebiarendaja jaoks hädavajalik. Järgides selles põhjalikus juhendis toodud juhiseid ja parimaid praktikaid, saate luua turvalisi ja funktsionaalseid veebirakendusi, mis suhtlevad sujuvalt ressurssidega erinevatest päritoludest.

Pidage meeles, et alati tuleb eelistada turvalisust ja vältida liiga lubavaid CORS-i seadistusi. Hoolikalt kaaludes oma CORS-i seadete turvamõjusid, saate kaitsta oma rakendusi ja andmeid volitamata juurdepääsu eest.

Loodame, et see juhend aitas teil CORS-i demüstifitseerida. Head kodeerimist!