CORS Yapılandırması için Laravel, Windows IIS, Linux Apache, NGIX Sistemlerinde Yapılması Gereken Ayarlar
CORS (Cross-Origin Resource Sharing), bir web sayfasının farklı bir origin (kaynak) üzerindeki kaynağa erişmesine izin vermek için kullanılan bir güvenlik mekanizmasıdır. "Origin" bir kaynağın protokol, domain ve port üçlüsünü ifade eder. Aynı kaynağa sahip iki URL aşağıdaki üç bileşeni de aynıysa aynı origin olarak kabul edilir:
- Protokol (örn. HTTP, HTTPS)
- Domain (örn. example.com)
- Port (örn. 80, 443)
Neden CORS Kullanılır?
Web tarayıcıları, güvenlik amacıyla, bir web sayfasının (örn. https://site-a.com
) başka bir domain'den (örn. https://site-b.com
) gelen kaynağa (örn. bir API isteği) erişimini sınırlayan bir güvenlik politikasına (aynı-origin politikası) sahiptir. Bu politika, zararlı sitelerin kullanıcı verilerine erişimini engellemeye yardımcı olur.
Ancak, bazı durumlarda farklı origin'lerden gelen kaynaklara erişim gereklidir. Örneğin, bir web uygulaması üçüncü taraf bir API'yi kullanabilir. İşte bu noktada CORS devreye girer.
CORS Nasıl Çalışır?
CORS, sunucunun belirli origin'lerden gelen istekleri kabul edip etmeyeceğine karar vermesine olanak tanır. CORS şu adımlarla çalışır:
-
Preflight İsteği (Ön Uç İsteği):
- Tarayıcı, HTTP yöntemleri (GET, POST, PUT, DELETE gibi) ve başlıkları (headers) kullanarak bir preflight isteği (OPTIONS isteği) gönderir.
- Bu istekte
Origin
,Access-Control-Request-Method
veAccess-Control-Request-Headers
başlıkları bulunur.
-
Sunucu Yanıtı:
- Sunucu, bu preflight isteğine
Access-Control-Allow-Origin
,Access-Control-Allow-Methods
veAccess-Control-Allow-Headers
başlıklarıyla yanıt verir. - Eğer tarayıcı, sunucunun yanıtını uygun bulursa, gerçek isteği gönderir.
- Sunucu, bu preflight isteğine
CORS Başlıkları
CORS yapılandırmasında kullanılan bazı yaygın başlıklar şunlardır:
- Access-Control-Allow-Origin: İsteklerin hangi origin'lerden kabul edileceğini belirler.
- Access-Control-Allow-Methods: Hangi HTTP yöntemlerinin (GET, POST, PUT, DELETE vb.) kabul edileceğini belirler.
- Access-Control-Allow-Headers: Hangi HTTP başlıklarının kabul edileceğini belirler.
- Access-Control-Allow-Credentials: İsteklerin kullanıcı kimlik bilgileriyle (çerezler, HTTP kimlik doğrulama bilgileri) birlikte gönderilip gönderilemeyeceğini belirler.
- Access-Control-Expose-Headers: İstemcinin erişebileceği başlıkları listeler.
- Access-Control-Max-Age: Preflight isteğinin geçerlilik süresini (saniye cinsinden) belirler.
Örnek Senaryo
Bir JavaScript uygulaması https://example.com
domain'inde çalışıyor ve https://api.example.com
adresinden veri almak istiyor. Normalde tarayıcı, bu tür bir cross-origin isteği engeller. Ancak, sunucu (https://api.example.com), CORS başlıklarını doğru şekilde ayarlarsa, tarayıcı isteği gerçekleştirir.
Laravel CORS Ayarları
Laravel'de CORS politikasını yönetmek için genellikle barryvdh/laravel-cors
paketi kullanılır. Ancak, Laravel 7.x ve üzeri sürümlerde, CORS desteği doğrudan Laravel ile birlikte gelir. İşte adım adım yapmanız ge
1. CORS Middleware Eklemek:
-
Laravel 7.x ve üstü için
config/cors.php
dosyası zaten mevcut olacaktır. Bu dosyayı aşağıdaki gibi düzenleyebilirsiniz:
return [
'paths' => ['api/*', 'restapi/*'], // CORS'u etkinleştirmek istediğiniz yollar
'allowed_methods' => ['*'], // İzin verilen HTTP metotları
'allowed_origins' => ['https://app.kolaysayfa.com'], // İzin verilen originler
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'], // İzin verilen başlıklar
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
];
2. Middleware’i Register Etmek:
-
app/Http/Kernel.php
dosyasında,api
middleware grubuna CORS middleware’ini ekleyin:
protected $middlewareGroups = [
'api' => [
\Fruitcake\Cors\HandleCors::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
3. Composer ile CORS Paketi Kurmak (Eğer Gerekirse):
-
Eğer
Fruitcake\Cors
paketi yüklü değilse, şu komut ile yükleyin:
composer require fruitcake/laravel-cors
Windows IIS Sunucu CORS Ayarları
IIS üzerinde CORS ayarlarını yapmak için web.config dosyasını düzenlemeniz gerekir. Aşağıdaki adımları izleyebilirsiniz:
-
web.config Dosyasını Düzenlemek:
-
IIS sitenizin kök dizininde yer alan
web.config
dosyasına aşağıdaki XML'i ekleyin:
-
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="https://app.kolaysayfa.com" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
2. CORS Preflight İsteklerini İşlemek:
-
OPTIONS isteklerini işlemek için IIS sunucusunun bu istekleri doğru şekilde yönettiğinden emin olun. Bunun için
web.config
dosyasına aşağıdaki kuralı ekleyin:
<configuration>
<system.webServer>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" preCondition="bitness64" />
<add name="TRACEVerbHandler" path="*" verb="TRACE" modules="IsapiModule" scriptProcessor="%windir%\system32\inetsrv\asp.dll" resourceType="Unspecified" requireAccess="None" preCondition="bitness64" />
</handlers>
</system.webServer>
</configuration>
Apache IIS Sunucu CORS Ayarları
Apache web sunucusunda CORS ayarlarını yapmak için .htaccess
dosyasını veya ana yapılandırma dosyasını düzenleyebilirsiniz:
-
.htaccess Dosyasını Düzenlemek:
-
Laravel uygulamanızın kök dizinindeki
.htaccess
dosyasına aşağıdaki satırları ekleyin:
-
Header set Access-Control-Allow-Origin "https://app.kolaysayfa.com"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
-
Apache Yapılandırma Dosyasını Düzenlemek:
-
Ana Apache yapılandırma dosyasını (
/etc/apache2/apache2.conf
veya sanal ana bilgisayar yapılandırma dosyanızı) düzenleyin ve aşağıdaki satırları ekleyin:ServerName your-domain.com DocumentRoot /path/to/your/laravel/public AllowOverride All Require all granted Header set Access-Control-Allow-Origin "https://app.kolaysayfa.com" Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE" Header set Access-Control-Allow-Headers "Content-Type, Authorization"
-
-
Apache Modülünü Etkinleştirmek:
-
Apache
mod_headers
modülünün etkin olduğundan emin olun:sudo a2enmod headers sudo systemctl restart apache2
-
Nginx IIS Sunucu CORS Ayarları
Nginx web sunucusunda CORS ayarlarını yapmak için yapılandırma dosyasını düzenlemeniz gerekecek:
-
Nginx Yapılandırma Dosyasını Düzenlemek:
-
Nginx yapılandırma dosyanızı (
/etc/nginx/sites-available/default
veya sanal ana bilgisayar yapılandırma dosyanızı) açın ve aşağıdaki satırları ekleyin:server { listen 80; server_name your-domain.com; root /path/to/your/laravel/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP-FPM versiyonunuza göre güncelleyin fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } add_header 'Access-Control-Allow-Origin' 'https://app.kolaysayfa.com' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always; }
-
-
Nginx Yapılandırmasını Test Etmek ve Yeniden Başlatmak:
-
Nginx yapılandırmasını test edin ve yeniden başlatın:
sudo nginx -t sudo systemctl restart nginx
-
Bu adımları takip ederek, Laravel uygulamanızda ve Linux/Windows üzerinde çalışan web sunucunuzda (IIS, Apache veya Nginx) CORS yapılandırmasını düzgün bir şekilde ayarlayabilirsiniz. Bu sayede, https://app.example.com
adresinden yapılan istekler https://example.com
adresine doğru şekilde yönlendirilir ve CORS hataları çözülmüş olur.
- Laravel
- Web Yazılım
- Güvenlik
Tepkini Göster
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
Yorumlar
Sende Yorumunu Ekle