Cross-Origin Resource Sharing (CORS) மற்றும் ப்ரீஃபிளைட் கோரிக்கைகள் பற்றிய ஒரு ஆழமான ஆய்வு. CORS சிக்கல்களைக் கையாள்வது மற்றும் உலகளாவிய பார்வையாளர்களுக்காக உங்கள் வலைப் பயன்பாடுகளைப் பாதுகாப்பது எப்படி என்பதை அறிக.
CORS-ஐப் புரிந்துகொள்ளுதல்: ஜாவாஸ்கிரிப்ட் ப்ரீஃபிளைட் கோரிக்கை கையாளுதலில் ஒரு ஆழமான பார்வை
தொடர்ந்து விரிவடையும் வலை மேம்பாட்டு உலகில், பாதுகாப்பு மிக முக்கியமானது. Cross-Origin Resource Sharing (CORS) என்பது வலைப் பக்கத்தை வழங்கிய டொமைனைத் தவிர வேறு ஒரு டொமைனுக்கு கோரிக்கைகளை வைப்பதிலிருந்து வலைப் பக்கங்களைக் கட்டுப்படுத்த வலை உலாவிகளால் செயல்படுத்தப்படும் ஒரு முக்கியமான பாதுகாப்பு வழிமுறையாகும். இது தீங்கிழைக்கும் வலைத்தளங்கள் முக்கியமான தரவை அணுகுவதைத் தடுக்க வடிவமைக்கப்பட்ட ஒரு அடிப்படை பாதுகாப்பு அம்சமாகும். இந்த விரிவான வழிகாட்டி CORS-இன் நுணுக்கங்களை, குறிப்பாக ப்ரீஃபிளைட் கோரிக்கை கையாளுதலில் கவனம் செலுத்தி ஆராயும். CORS-இன் 'ஏன்,' 'என்ன,' மற்றும் 'எப்படி' என்பதை நாம் ஆராய்வோம், உலகெங்கிலும் உள்ள டெவலப்பர்கள் எதிர்கொள்ளும் பொதுவான சிக்கல்களுக்கு நடைமுறை எடுத்துக்காட்டுகள் மற்றும் தீர்வுகளை வழங்குவோம்.
ஒரே-மூலக் கொள்கையைப் புரிந்துகொள்ளுதல்
CORS-இன் மையத்தில் ஒரே-மூலக் கொள்கை (Same-Origin Policy - SOP) உள்ளது. இந்தக் கொள்கை ஒரு உலாவி-நிலை பாதுகாப்பு வழிமுறையாகும், இது ஒரு மூலத்தில் இயங்கும் ஸ்கிரிப்டுகள் வேறு மூலத்திலிருந்து வளங்களை அணுகுவதைக் கட்டுப்படுத்துகிறது. ஒரு மூலம் என்பது நெறிமுறை (உதாரணமாக, HTTP அல்லது HTTPS), டொமைன் (உதாரணமாக, example.com), மற்றும் போர்ட் (உதாரணமாக, 80 அல்லது 443) ஆகியவற்றால் வரையறுக்கப்படுகிறது. இந்த மூன்று கூறுகளும் சரியாகப் பொருந்தினால் இரண்டு URL-கள் ஒரே மூலத்தைக் கொண்டுள்ளன.
உதாரணமாக:
https://www.example.com/app1/index.html
மற்றும்https://www.example.com/app2/index.html
ஆகியவை ஒரே மூலத்தைக் கொண்டுள்ளன (ஒரே நெறிமுறை, டொமைன், மற்றும் போர்ட்).https://www.example.com/index.html
மற்றும்http://www.example.com/index.html
ஆகியவை வெவ்வேறு மூலங்களைக் கொண்டுள்ளன (வெவ்வேறு நெறிமுறைகள்).https://www.example.com/index.html
மற்றும்https://api.example.com/index.html
ஆகியவை வெவ்வேறு மூலங்களைக் கொண்டுள்ளன (வெவ்வேறு துணை டொமைன்கள் வெவ்வேறு டொமைன்களாகக் கருதப்படுகின்றன).https://www.example.com:8080/index.html
மற்றும்https://www.example.com/index.html
ஆகியவை வெவ்வேறு மூலங்களைக் கொண்டுள்ளன (வெவ்வேறு போர்ட்கள்).
SOP ஒரு வலைத்தளத்தில் உள்ள தீங்கிழைக்கும் ஸ்கிரிப்டுகள் மற்றொரு வலைத்தளத்தில் உள்ள குக்கீகள் அல்லது பயனர் அங்கீகாரத் தகவல் போன்ற முக்கியமான தரவை அணுகுவதைத் தடுக்க வடிவமைக்கப்பட்டுள்ளது. பாதுகாப்பிற்கு அவசியமானதாக இருந்தாலும், SOP கட்டுப்படுத்தக்கூடியதாகவும் இருக்கலாம், குறிப்பாக முறையான கிராஸ்-ஆரிஜின் கோரிக்கைகள் தேவைப்படும்போது.
கிராஸ்-ஆரிஜின் ரிசோர்ஸ் ஷேரிங் (CORS) என்றால் என்ன?
CORS என்பது எந்தெந்த மூலங்கள் (டொமைன்கள், ஸ்கீம்கள் அல்லது போர்ட்கள்) தங்கள் வளங்களை அணுக அனுமதிக்கப்படுகின்றன என்பதை சர்வர்கள் குறிப்பிட அனுமதிக்கும் ஒரு வழிமுறையாகும். இது அடிப்படையில் SOP-ஐத் தளர்த்துகிறது, கட்டுப்படுத்தப்பட்ட கிராஸ்-ஆரிஜின் அணுகலை அனுமதிக்கிறது. CORS என்பது கிளையன்ட் (பொதுவாக ஒரு வலை உலாவி) மற்றும் சர்வருக்கு இடையில் பரிமாறப்படும் HTTP ஹெடர்களைப் பயன்படுத்தி செயல்படுத்தப்படுகிறது.
ஒரு உலாவி ஒரு கிராஸ்-ஆரிஜின் கோரிக்கையை (அதாவது, தற்போதைய பக்கத்தின் மூலத்திலிருந்து வேறுபட்ட ஒரு மூலத்திற்கான கோரிக்கை) வைக்கும்போது, அது முதலில் சர்வர் கோரிக்கையை அனுமதிக்கிறதா என்பதைச் சரிபார்க்கிறது. இது சர்வரின் பதிலில் உள்ள Access-Control-Allow-Origin
ஹெடரை ஆய்வு செய்வதன் மூலம் செய்யப்படுகிறது. கோரிக்கையின் மூலம் இந்த ஹெடரில் பட்டியலிடப்பட்டிருந்தால் (அல்லது ஹெடர் *
என அமைக்கப்பட்டிருந்தால், அனைத்து மூலங்களையும் அனுமதிக்கும்), உலாவி கோரிக்கையைத் தொடர அனுமதிக்கிறது. இல்லையெனில், உலாவி கோரிக்கையைத் தடுக்கிறது, ஜாவாஸ்கிரிப்ட் குறியீடு பதில் தரவை அணுகுவதைத் தடுக்கிறது.
ப்ரீஃபிளைட் கோரிக்கைகளின் பங்கு
சில வகையான கிராஸ்-ஆரிஜின் கோரிக்கைகளுக்கு, உலாவி ஒரு ப்ரீஃபிளைட் கோரிக்கையை (preflight request) தொடங்குகிறது. இது உண்மையான கோரிக்கைக்கு முன் சர்வருக்கு அனுப்பப்படும் ஒரு OPTIONS
கோரிக்கையாகும். ப்ரீஃபிளைட் கோரிக்கையின் நோக்கம், உண்மையான கோரிக்கையை ஏற்க சர்வர் தயாராக உள்ளதா என்பதைத் தீர்மானிப்பதாகும். சர்வர் அனுமதிக்கப்பட்ட முறைகள், ஹெடர்கள் மற்றும் பிற கட்டுப்பாடுகள் பற்றிய தகவல்களுடன் ப்ரீஃபிளைட் கோரிக்கைக்கு பதிலளிக்கிறது.
கிராஸ்-ஆரிஜின் கோரிக்கை பின்வரும் நிபந்தனைகளில் ஏதேனும் ஒன்றை சந்திக்கும் போது ப்ரீஃபிளைட் கோரிக்கைகள் தூண்டப்படுகின்றன:
- கோரிக்கை முறை
GET
,HEAD
, அல்லதுPOST
அல்ல. - கோரிக்கையில் தனிப்பயன் ஹெடர்கள் உள்ளன (அதாவது, உலாவியால் தானாகச் சேர்க்கப்படும் ஹெடர்களைத் தவிர வேறு ஹெடர்கள்).
Content-Type
ஹெடர்application/x-www-form-urlencoded
,multipart/form-data
, அல்லதுtext/plain
தவிர வேறு எதற்காவது அமைக்கப்பட்டுள்ளது.- கோரிக்கை அதன் பாடத்தில்
ReadableStream
பொருட்களைப் பயன்படுத்துகிறது.
உதாரணமாக, application/json
இன் Content-Type
உடன் கூடிய ஒரு PUT
கோரிக்கை ஒரு ப்ரீஃபிளைட் கோரிக்கையைத் தூண்டும், ஏனெனில் அது அனுமதிக்கப்பட்ட முறைகளை விட வேறு முறையைப் பயன்படுத்துகிறது மற்றும் அனுமதிக்கப்படாத உள்ளடக்க வகையைப் பயன்படுத்தக்கூடும்.
ப்ரீஃபிளைட் கோரிக்கைகள் ஏன்?
ப்ரீஃபிளைட் கோரிக்கைகள் பாதுகாப்பிற்கு அவசியமானவை, ஏனெனில் அவை தீங்கு விளைவிக்கக்கூடிய கிராஸ்-ஆரிஜின் கோரிக்கைகளை செயல்படுத்தப்படுவதற்கு முன்பு நிராகரிக்க சர்வருக்கு ஒரு வாய்ப்பை வழங்குகின்றன. ப்ரீஃபிளைட் கோரிக்கைகள் இல்லாமல், ஒரு தீங்கிழைக்கும் வலைத்தளம் சர்வரின் வெளிப்படையான ஒப்புதல் இல்லாமல் சர்வருக்கு தன்னிச்சையான கோரிக்கைகளை அனுப்பக்கூடும். ஒரு ப்ரீஃபிளைட் கோரிக்கை, கோரிக்கை ஏற்றுக்கொள்ளத்தக்கது என்பதை சர்வர் சரிபார்க்க அனுமதிக்கிறது மற்றும் தீங்கு விளைவிக்கக்கூடிய செயல்பாடுகளைத் தடுக்கிறது.
சர்வர்-பக்கத்தில் ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாளுதல்
உங்கள் வலைப் பயன்பாடு சரியாகவும் பாதுகாப்பாகவும் செயல்படுவதை உறுதிசெய்ய, ப்ரீஃபிளைட் கோரிக்கைகளை முறையாகக் கையாள்வது முக்கியம். உண்மையான கோரிக்கை அனுமதிக்கப்படுகிறதா என்பதைக் குறிக்க, சர்வர் OPTIONS
கோரிக்கைக்கு பொருத்தமான CORS ஹெடர்களுடன் பதிலளிக்க வேண்டும்.
ப்ரீஃபிளைட் பதில்களில் பயன்படுத்தப்படும் முக்கிய CORS ஹெடர்களின் ஒரு முறிவு இங்கே:
Access-Control-Allow-Origin
: இந்த ஹெடர் வளத்தை அணுக அனுமதிக்கப்பட்ட மூல(ங்களை)க் குறிப்பிடுகிறது. இது ஒரு குறிப்பிட்ட மூலத்திற்கு (உதாரணமாக,https://www.example.com
) அல்லது அனைத்து மூலங்களையும் அனுமதிக்க*
என அமைக்கப்படலாம். இருப்பினும்,*
பயன்படுத்துவது பொதுவாக பாதுகாப்பு காரணங்களுக்காக ஊக்கவிக்கப்படுவதில்லை, குறிப்பாக சர்வர் முக்கியமான தரவைக் கையாண்டால்.Access-Control-Allow-Methods
: இந்த ஹெடர் கிராஸ்-ஆரிஜின் கோரிக்கைக்கு அனுமதிக்கப்பட்ட HTTP முறைகளைக் குறிப்பிடுகிறது (உதாரணமாக,GET
,POST
,PUT
,DELETE
).Access-Control-Allow-Headers
: இந்த ஹெடர் உண்மையான கோரிக்கையில் அனுமதிக்கப்பட்ட தரமற்ற HTTP ஹெடர்களின் பட்டியலைக் குறிப்பிடுகிறது. கிளையன்ட்X-Custom-Header
அல்லதுAuthorization
போன்ற தனிப்பயன் ஹெடர்களை அனுப்பினால் இது அவசியம்.Access-Control-Allow-Credentials
: இந்த ஹெடர் உண்மையான கோரிக்கையில் குக்கீகள் அல்லது அங்கீகார ஹெடர்கள் போன்ற நற்சான்றிதழ்களைச் சேர்க்க முடியுமா என்பதைக் குறிக்கிறது. கிளையன்ட் பக்க குறியீடு நற்சான்றிதழ்களை அனுப்பினால் மற்றும் சர்வர் அவற்றை ஏற்க வேண்டும் என்றால் இதுtrue
என அமைக்கப்பட வேண்டும். குறிப்பு: இந்த ஹெடர் `true` என அமைக்கப்பட்டால், `Access-Control-Allow-Origin` *முடியாது* `*` என அமைக்கப்பட. நீங்கள் மூலத்தைக் குறிப்பிட வேண்டும்.Access-Control-Max-Age
: இந்த ஹெடர் உலாவி ப்ரீஃபிளைட் பதிலை கேச் செய்யக்கூடிய அதிகபட்ச நேரத்தை (வினாடிகளில்) குறிப்பிடுகிறது. இது அனுப்பப்படும் ப்ரீஃபிளைட் கோரிக்கைகளின் எண்ணிக்கையைக் குறைப்பதன் மூலம் செயல்திறனை மேம்படுத்த உதவும்.
உதாரணம்: Node.js-ல் Express-ஐப் பயன்படுத்தி ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாளுதல்
Express கட்டமைப்பைப் பயன்படுத்தி ஒரு Node.js பயன்பாட்டில் ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாள்வது எப்படி என்பதற்கான ஒரு உதாரணம் இங்கே:
const express = require('express');
const cors = require('cors');
const app = express();
// Enable CORS for all origins (for development purposes only!)
// In production, specify allowed origins for better security.
app.use(cors()); //or app.use(cors({origin: 'https://www.example.com'}));
// Route for handling OPTIONS requests (preflight)
app.options('/data', cors()); // Enable CORS for a single route. Or specify origin: cors({origin: 'https://www.example.com'})
// Route for handling GET requests
app.get('/data', (req, res) => {
res.json({ message: 'This is cross-origin data!' });
});
// Route to handle a preflight and a post request
app.options('/resource', cors()); // enable pre-flight request for DELETE request
app.delete('/resource', cors(), (req, res, next) => {
res.send('delete resource')
})
const port = 3000;
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
இந்த எடுத்துக்காட்டில், CORS கோரிக்கைகளைக் கையாள cors
மிடில்வேரைப் பயன்படுத்துகிறோம். மேலும் நுணுக்கமான கட்டுப்பாட்டிற்கு, CORS-ஐ ஒரு வழித்தடத்திற்கு ஒரு அடிப்படையில் இயக்கலாம். குறிப்பு: தயாரிப்பில், அனைத்து மூலங்களையும் அனுமதிப்பதற்குப் பதிலாக origin
விருப்பத்தைப் பயன்படுத்தி அனுமதிக்கப்பட்ட மூலங்களைக் குறிப்பிடுவது கடுமையாகப் பரிந்துரைக்கப்படுகிறது. *
பயன்படுத்தி அனைத்து மூலங்களையும் அனுமதிப்பது உங்கள் பயன்பாட்டைப் பாதுகாப்பு பாதிப்புகளுக்கு உள்ளாக்கக்கூடும்.
உதாரணம்: Python-ல் Flask-ஐப் பயன்படுத்தி ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாளுதல்
Flask கட்டமைப்பு மற்றும் flask_cors
நீட்டிப்பைப் பயன்படுத்தி ஒரு Python பயன்பாட்டில் ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாள்வது எப்படி என்பதற்கான ஒரு உதாரணம் இங்கே:
from flask import Flask, jsonify
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app) # Enable CORS for all routes
@app.route('/data')
@cross_origin()
def get_data():
data = {"message": "This is cross-origin data!"}
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
இது எளிமையான பயன்பாடாகும். முன்பைப் போலவே, மூலங்களைக் கட்டுப்படுத்தலாம். விவரங்களுக்கு flask-cors ஆவணத்தைப் பார்க்கவும்.
உதாரணம்: Java-வில் Spring Boot-ஐப் பயன்படுத்தி ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாளுதல்
Spring Boot-ஐப் பயன்படுத்தி ஒரு Java பயன்பாட்டில் ப்ரீஃபிளைட் கோரிக்கைகளைக் கையாள்வது எப்படி என்பதற்கான ஒரு உதாரணம் இங்கே:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@SpringBootApplication
public class CorsApplication {
public static void main(String[] args) {
SpringApplication.run(CorsApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/data").allowedOrigins("http://localhost:8080");
}
};
}
}
மற்றும் அதனுடன் தொடர்புடைய கண்ட்ரோலர்:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DataController {
@GetMapping("/data")
public String getData() {
return "This is cross-origin data!";
}
}
பொதுவான CORS சிக்கல்களும் தீர்வுகளும்
அதன் முக்கியத்துவம் இருந்தபோதிலும், CORS பெரும்பாலும் டெவலப்பர்களுக்கு விரக்தியின் ஆதாரமாக இருக்கலாம். இங்கே சில பொதுவான CORS சிக்கல்களும் அவற்றின் தீர்வுகளும் உள்ளன:
-
பிழை: "No 'Access-Control-Allow-Origin' header is present on the requested resource."
இந்தப் பிழை சர்வர் அதன் பதிலில்
Access-Control-Allow-Origin
ஹெடரைத் திருப்பவில்லை என்பதைக் குறிக்கிறது. இதைச் சரிசெய்ய, சர்வர் ஹெடரைச் சேர்க்கும் வகையில் உள்ளமைக்கப்பட்டுள்ளதா என்பதையும், அது சரியான மூலத்திற்கு அல்லது*
(பொருத்தமானால்) என அமைக்கப்பட்டுள்ளதா என்பதையும் உறுதிசெய்யவும்.தீர்வு: சர்வரை அதன் பதிலில் `Access-Control-Allow-Origin` ஹெடரைச் சேர்க்கும் வகையில் உள்ளமைக்கவும், அதை கோரும் வலைத்தளத்தின் மூலத்திற்கு அல்லது அனைத்து மூலங்களையும் அனுமதிக்க `*` என அமைக்கவும் (கவனத்துடன் பயன்படுத்தவும்).
-
பிழை: "Response to preflight request doesn't pass access control check: Request header field X-Custom-Header is not allowed by Access-Control-Allow-Headers in preflight response."
இந்த பிழை சர்வர் கிராஸ்-ஆரிஜின் கோரிக்கையில் தனிப்பயன் ஹெடரை (இந்த எடுத்துக்காட்டில்
X-Custom-Header
) அனுமதிக்கவில்லை என்பதைக் குறிக்கிறது. இதைச் சரிசெய்ய, சர்வர் ப்ரீஃபிளைட் பதிலில்Access-Control-Allow-Headers
ஹெடரில் அந்த ஹெடரைச் சேர்ப்பதை உறுதிசெய்யவும்.தீர்வு: தனிப்பயன் ஹெடரை (உதாரணமாக, `X-Custom-Header`) சர்வரின் ப்ரீஃபிளைட் பதிலில் `Access-Control-Allow-Headers` ஹெடரில் சேர்க்கவும்.
-
பிழை: "Credentials flag is 'true', but the 'Access-Control-Allow-Origin' header is '*'."
Access-Control-Allow-Credentials
ஹெடர்true
என அமைக்கப்பட்டால்,Access-Control-Allow-Origin
ஹெடர் ஒரு குறிப்பிட்ட மூலத்திற்கு அமைக்கப்பட வேண்டும்,*
அல்ல. ஏனெனில் அனைத்து மூலங்களிலிருந்தும் நற்சான்றிதழ்களை அனுமதிப்பது ஒரு பாதுகாப்பு அபாயமாக இருக்கும்.தீர்வு: நற்சான்றிதழ்களைப் பயன்படுத்தும்போது, `Access-Control-Allow-Origin` ஐ `*` என்பதற்குப் பதிலாக ஒரு குறிப்பிட்ட மூலத்திற்கு அமைக்கவும்.
-
ப்ரீஃபிளைட் கோரிக்கை அனுப்பப்படவில்லை.
உங்கள் ஜாவாஸ்கிரிப்ட் குறியீட்டில் `credentials: 'include'` பண்பு உள்ளதா என்பதை இருமுறை சரிபார்க்கவும். உங்கள் சர்வர் `Access-Control-Allow-Credentials: true` ஐ அனுமதிக்கிறதா என்பதையும் சரிபார்க்கவும்.
-
சர்வர் மற்றும் கிளையன்ட் இடையே முரண்பட்ட உள்ளமைவுகள்.
உங்கள் சர்வர் பக்க CORS உள்ளமைவை கிளையன்ட் பக்க அமைப்புகளுடன் கவனமாகச் சரிபார்க்கவும். பொருந்தாமை (உதாரணமாக, சர்வர் GET கோரிக்கைகளை மட்டுமே அனுமதிப்பது ஆனால் கிளையன்ட் POST அனுப்புவது) CORS பிழைகளை ஏற்படுத்தும்.
CORS மற்றும் பாதுகாப்பு சிறந்த நடைமுறைகள்
CORS கட்டுப்படுத்தப்பட்ட கிராஸ்-ஆரிஜின் அணுகலை அனுமதித்தாலும், பாதிப்புகளைத் தடுக்க பாதுகாப்பு சிறந்த நடைமுறைகளைப் பின்பற்றுவது அவசியம்:
- தயாரிப்பில்
Access-Control-Allow-Origin
ஹெடரில்*
பயன்படுத்துவதைத் தவிர்க்கவும். இது அனைத்து மூலங்களையும் உங்கள் வளங்களை அணுக அனுமதிக்கிறது, இது ஒரு பாதுகாப்பு அபாயமாக இருக்கலாம். அதற்குப் பதிலாக, அனுமதிக்கப்பட்ட சரியான மூலங்களைக் குறிப்பிடவும். - எந்த முறைகள் மற்றும் ஹெடர்களை அனுமதிப்பது என்பதை கவனமாகக் கருத்தில் கொள்ளுங்கள். உங்கள் பயன்பாடு சரியாகச் செயல்பட கண்டிப்பாகத் தேவையான முறைகள் மற்றும் ஹெடர்களை மட்டுமே அனுமதிக்கவும்.
- சரியான அங்கீகாரம் மற்றும் அங்கீகார வழிமுறைகளைச் செயல்படுத்தவும். CORS அங்கீகாரம் மற்றும் அங்கீகாரத்திற்கு மாற்றாக இல்லை. உங்கள் API பொருத்தமான பாதுகாப்பு நடவடிக்கைகளால் பாதுகாக்கப்படுவதை உறுதிசெய்யவும்.
- அனைத்து பயனர் உள்ளீடுகளையும் சரிபார்த்து சுத்திகரிக்கவும். இது கிராஸ்-சைட் ஸ்கிரிப்டிங் (XSS) தாக்குதல்கள் மற்றும் பிற பாதிப்புகளைத் தடுக்க உதவுகிறது.
- உங்கள் சர்வர் பக்க CORS உள்ளமைவைப் புதுப்பித்த நிலையில் வைத்திருங்கள். உங்கள் CORS உள்ளமைவை உங்கள் பயன்பாட்டின் பாதுகாப்புத் தேவைகளுடன் ஒத்துப்போவதை உறுதிசெய்ய அதைத் தவறாமல் மதிப்பாய்வு செய்து புதுப்பிக்கவும்.
பல்வேறு மேம்பாட்டுச் சூழல்களில் CORS
CORS சிக்கல்கள் பல்வேறு மேம்பாட்டுச் சூழல்கள் மற்றும் தொழில்நுட்பங்களில் வித்தியாசமாக வெளிப்படலாம். சில பொதுவான சூழ்நிலைகளில் CORS-ஐ எப்படி அணுகுவது என்பது இங்கே:
உள்ளூர் மேம்பாட்டுச் சூழல்கள்
உள்ளூர் மேம்பாட்டின் போது, CORS சிக்கல்கள் குறிப்பாக எரிச்சலூட்டும். உலாவிகள் பெரும்பாலும் உங்கள் உள்ளூர் மேம்பாட்டுச் சர்வரிடமிருந்து (உதாரணமாக, localhost:3000
) ஒரு தொலைநிலை API-க்கு கோரிக்கைகளைத் தடுக்கின்றன. பல நுட்பங்கள் இந்த வலியை எளிதாக்கலாம்:
- உலாவி நீட்டிப்புகள்: "Allow CORS: Access-Control-Allow-Origin" போன்ற நீட்டிப்புகள் சோதனை நோக்கங்களுக்காக CORS கட்டுப்பாடுகளை தற்காலிகமாக முடக்கலாம். இருப்பினும், இவற்றை *எப்போதும்* தயாரிப்பில் பயன்படுத்த வேண்டாம்.
- ப்ராக்ஸி சர்வர்கள்: உங்கள் உள்ளூர் மேம்பாட்டுச் சர்வரிடமிருந்து தொலைநிலை API-க்கு கோரிக்கைகளை அனுப்பும் ஒரு ப்ராக்ஸி சர்வரை உள்ளமைக்கவும். இது உலாவியின் கண்ணோட்டத்தில் கோரிக்கைகளை "ஒரே-மூலம்" ஆக்குகிறது.
http-proxy-middleware
(Node.js-க்கு) போன்ற கருவிகள் இதற்கு உதவியாக இருக்கும். - சர்வர் CORS-ஐ உள்ளமைத்தல்: மேம்பாட்டின் போதும் கூட, உங்கள் உள்ளூர் மேம்பாட்டு மூலத்திலிருந்து (உதாரணமாக,
http://localhost:3000
) கோரிக்கைகளை வெளிப்படையாக அனுமதிக்க உங்கள் API சர்வரை உள்ளமைப்பது சிறந்த நடைமுறையாகும். இது ஒரு நிஜ உலக CORS உள்ளமைவை உருவகப்படுத்துகிறது மற்றும் சிக்கல்களை முன்கூட்டியே கண்டறிய உதவுகிறது.
சர்வர்லெஸ் சூழல்கள் (உதாரணமாக, AWS Lambda, Google Cloud Functions)
சர்வர்லெஸ் செயல்பாடுகளுக்கு பெரும்பாலும் கவனமான CORS உள்ளமைவு தேவைப்படுகிறது. பல சர்வர்லெஸ் தளங்கள் உள்ளமைக்கப்பட்ட CORS ஆதரவை வழங்குகின்றன, ஆனால் அதைச் சரியாக உள்ளமைப்பது முக்கியம்:
- தள-குறிப்பிட்ட அமைப்புகள்: தளத்தின் உள்ளமைக்கப்பட்ட CORS உள்ளமைவு விருப்பங்களைப் பயன்படுத்தவும். உதாரணமாக, AWS Lambda, API கேட்வே அமைப்புகளில் நேரடியாக அனுமதிக்கப்பட்ட மூலங்கள், முறைகள் மற்றும் ஹெடர்களைக் குறிப்பிட உங்களை அனுமதிக்கிறது.
- மிடில்வேர்/நூலகங்கள்: அதிக நெகிழ்வுத்தன்மைக்கு, உங்கள் சர்வர்லெஸ் செயல்பாட்டுக் குறியீட்டிற்குள் CORS-ஐக் கையாள மிடில்வேர் அல்லது நூலகங்களைப் பயன்படுத்தலாம். இது பாரம்பரிய சர்வர் சூழல்களில் பயன்படுத்தப்படும் அணுகுமுறைகளைப் போன்றது (உதாரணமாக, Node.js Lambda செயல்பாடுகளில் `cors` தொகுப்பைப் பயன்படுத்துதல்).
- `OPTIONS` முறையைக் கருத்தில் கொள்ளுங்கள்: உங்கள் சர்வர்லெஸ் செயல்பாடு
OPTIONS
கோரிக்கைகளைச் சரியாகக் கையாள்வதை உறுதிசெய்யவும். இது பெரும்பாலும் பொருத்தமான CORS ஹெடர்களைத் திருப்பும் ஒரு தனி வழியை உருவாக்குவதை உள்ளடக்கியது.
மொபைல் ஆப் மேம்பாடு (உதாரணமாக, React Native, Flutter)
நேட்டிவ் மொபைல் பயன்பாடுகளுக்கு (Android, iOS) CORS ஒரு நேரடி கவலையாக இல்லை, ஏனெனில் அவை பொதுவாக வலை உலாவிகளைப் போலவே ஒரே-மூலக் கொள்கையைச் செயல்படுத்தாது. இருப்பினும், உங்கள் மொபைல் பயன்பாடு வலை உள்ளடக்கத்தைக் காட்ட ஒரு வலைப் பார்வையைப் பயன்படுத்தினால் அல்லது நீங்கள் React Native அல்லது Flutter போன்ற ஜாவாஸ்கிரிப்டைப் பயன்படுத்தும் கட்டமைப்புகளைப் பயன்படுத்தினால் CORS இன்னும் பொருத்தமானதாக இருக்கலாம்:
- வலைப் பார்வைகள்: உங்கள் மொபைல் பயன்பாடு வலை உள்ளடக்கத்தைக் காட்ட ஒரு வலைப் பார்வையைப் பயன்படுத்தினால், வலை உலாவியில் உள்ள அதே CORS விதிகள் பொருந்தும். வலை உள்ளடக்கத்தின் மூலத்திலிருந்து கோரிக்கைகளை அனுமதிக்க உங்கள் சர்வரை உள்ளமைக்கவும்.
- React Native/Flutter: இந்தக் கட்டமைப்புகள் API கோரிக்கைகளைச் செய்ய ஜாவாஸ்கிரிப்டைப் பயன்படுத்துகின்றன. நேட்டிவ் சூழல் நேரடியாக CORS-ஐச் செயல்படுத்தாவிட்டாலும், அடிப்படைக் HTTP கிளையண்டுகள் (உதாரணமாக,
fetch
) சில சூழ்நிலைகளில் CORS-போன்ற நடத்தையை வெளிப்படுத்தலாம். - நேட்டிவ் HTTP கிளையண்டுகள்: நேட்டிவ் குறியீட்டிலிருந்து நேரடியாக API கோரிக்கைகளைச் செய்யும்போது (உதாரணமாக, Android-ல் OkHttp அல்லது iOS-ல் URLSession-ஐப் பயன்படுத்துதல்), CORS பொதுவாக ஒரு காரணி அல்ல. இருப்பினும், சரியான அங்கீகாரம் மற்றும் அங்கீகாரம் போன்ற பாதுகாப்பு சிறந்த நடைமுறைகளைக் கருத்தில் கொள்ள வேண்டும்.
CORS உள்ளமைப்பிற்கான உலகளாவிய பரிசீலனைகள்
உலகளவில் அணுகக்கூடிய ஒரு பயன்பாட்டிற்கு CORS-ஐ உள்ளமைக்கும்போது, பின்வரும் காரணிகளைக் கருத்தில் கொள்வது முக்கியம்:
- தரவு இறையாண்மை: சில பிராந்தியங்களில் உள்ள விதிமுறைகள், தரவு அந்த பிராந்தியத்திற்குள் இருக்க வேண்டும் என்று கட்டளையிடுகின்றன. எல்லைகளைத் தாண்டி வளங்களை அணுகும்போது CORS சம்பந்தப்பட்டிருக்கலாம், இது தரவு வசிப்பிடச் சட்டங்களை மீறக்கூடும்.
- பிராந்திய பாதுகாப்பு கொள்கைகள்: வெவ்வேறு நாடுகள் வெவ்வேறு இணையப் பாதுகாப்பு விதிமுறைகள் மற்றும் வழிகாட்டுதல்களைக் கொண்டிருக்கலாம், அவை CORS எவ்வாறு செயல்படுத்தப்பட வேண்டும் மற்றும் பாதுகாக்கப்பட வேண்டும் என்பதை பாதிக்கின்றன.
- உள்ளடக்க விநியோக நெட்வொர்க்குகள் (CDNs): உங்கள் CDN தேவையான CORS ஹெடர்களை அனுப்ப சரியாக உள்ளமைக்கப்பட்டுள்ளதா என்பதை உறுதிசெய்யவும். தவறாக உள்ளமைக்கப்பட்ட CDN-கள் CORS ஹெடர்களை அகற்றலாம், இது எதிர்பாராத பிழைகளுக்கு வழிவகுக்கும்.
- சுமை சமநிலைப்படுத்திகள் மற்றும் ப்ராக்ஸிகள்: உங்கள் உள்கட்டமைப்பில் உள்ள எந்த சுமை சமநிலைப்படுத்திகளும் அல்லது தலைகீழ் ப்ராக்ஸிகளும் ப்ரீஃபிளைட் கோரிக்கைகளைச் சரியாகக் கையாளுகின்றனவா மற்றும் CORS ஹெடர்களை அனுப்புகின்றனவா என்பதை சரிபார்க்கவும்.
- பல மொழி ஆதரவு: CORS உங்கள் பயன்பாட்டின் சர்வதேசமயமாக்கல் (i18n) மற்றும் உள்ளூர்மயமாக்கல் (l10n) உத்திகளுடன் எவ்வாறு தொடர்பு கொள்கிறது என்பதைக் கருத்தில் கொள்ளுங்கள். உங்கள் பயன்பாட்டின் வெவ்வேறு மொழி பதிப்புகளில் CORS கொள்கைகள் சீராக இருப்பதை உறுதிசெய்யவும்.
CORS-ஐச் சோதித்தல் மற்றும் பிழைத்திருத்தம் செய்தல்
CORS-ஐ திறம்பட சோதிப்பதும் பிழைத்திருத்தம் செய்வதும் இன்றியமையாதது. இங்கே சில நுட்பங்கள் உள்ளன:
- உலாவி டெவலப்பர் கருவிகள்: உலாவியின் டெவலப்பர் கன்சோல் உங்கள் முதல் நிறுத்தம். "Network" தாவல் ப்ரீஃபிளைட் கோரிக்கைகள் மற்றும் பதில்களைக் காட்டும், CORS ஹெடர்கள் உள்ளனவா மற்றும் சரியாக உள்ளமைக்கப்பட்டுள்ளனவா என்பதை வெளிப்படுத்தும்.
- `curl` கட்டளை-வரி கருவி: ப்ரீஃபிளைட் கோரிக்கைகளை கைமுறையாக அனுப்பவும், சர்வரின் பதில் ஹெடர்களை ஆய்வு செய்யவும் `curl -v -X OPTIONS
` ஐப் பயன்படுத்தவும். - ஆன்லைன் CORS சரிபார்ப்பிகள்: உங்கள் CORS உள்ளமைவைச் சரிபார்க்க பல ஆன்லைன் கருவிகள் உதவலாம். "CORS checker" என்று தேடினால் போதும்.
- அலகு மற்றும் ஒருங்கிணைப்பு சோதனைகள்: உங்கள் CORS உள்ளமைவு எதிர்பார்த்தபடி செயல்படுகிறதா என்பதைச் சரிபார்க்க தானியங்கு சோதனைகளை எழுதவும். இந்த சோதனைகள் வெற்றிகரமான கிராஸ்-ஆரிஜின் கோரிக்கைகள் மற்றும் CORS அணுகலைத் தடுக்க வேண்டிய சூழ்நிலைகள் இரண்டையும் உள்ளடக்க வேண்டும்.
- பதிவு செய்தல் மற்றும் கண்காணித்தல்: ப்ரீஃபிளைட் கோரிக்கைகள் மற்றும் தடுக்கப்பட்ட கோரிக்கைகள் போன்ற CORS-தொடர்பான நிகழ்வுகளைக் கண்காணிக்க பதிவு செய்தலைச் செயல்படுத்தவும். சந்தேகத்திற்கிடமான செயல்பாடு அல்லது உள்ளமைவு பிழைகளுக்கு உங்கள் பதிவுகளைக் கண்காணிக்கவும்.
முடிவுரை
Cross-Origin Resource Sharing (CORS) என்பது வலை வளங்களுக்கு கட்டுப்படுத்தப்பட்ட கிராஸ்-ஆரிஜின் அணுகலை செயல்படுத்தும் ஒரு முக்கிய பாதுகாப்பு வழிமுறையாகும். CORS எவ்வாறு செயல்படுகிறது, குறிப்பாக ப்ரீஃபிளைட் கோரிக்கைகள், என்பதைப் புரிந்துகொள்வது பாதுகாப்பான மற்றும் நம்பகமான வலைப் பயன்பாடுகளை உருவாக்குவதற்கு முக்கியமானது. இந்த வழிகாட்டியில் கோடிட்டுக் காட்டப்பட்டுள்ள சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலம், நீங்கள் CORS சிக்கல்களைத் திறம்பட கையாளலாம் மற்றும் உங்கள் பயன்பாட்டை சாத்தியமான பாதிப்புகளிலிருந்து பாதுகாக்கலாம். எப்போதும் பாதுகாப்பிற்கு முன்னுரிமை அளிக்க நினைவில் கொள்ளுங்கள் மற்றும் உங்கள் CORS உள்ளமைவின் தாக்கங்களை கவனமாகக் கருத்தில் கொள்ளுங்கள்.
வலை மேம்பாடு வளர்ச்சியடையும் போது, CORS வலைப் பாதுகாப்பின் ஒரு முக்கிய அம்சமாகத் தொடரும். சமீபத்திய CORS சிறந்த நடைமுறைகள் மற்றும் நுட்பங்களைப் பற்றி அறிந்திருப்பது பாதுகாப்பான மற்றும் உலகளவில் அணுகக்கூடிய வலைப் பயன்பாடுகளை உருவாக்குவதற்கு அவசியம்.