CORS Yapılandırması için Laravel, Windows IIS, Linux Apache, NGIX Sistemlerinde Yapılması Gereken Ayarlar

CORS (Cross-Origin Resource Sharing) hatası, bir web uygulamasının başka bir kaynaktan (domain, protokol veya port) kaynak isteği yapmaya çalıştığında ve bu isteğin karşı sunucu tarafından kabul edilmediğinde meydana gelir.
CORS Yapılandırması için Laravel, Windows IIS, Linux Apache, NGIX Sistemlerinde Yapılması Gereken Ayarlar - bimakale.com | bimakale.com
11 Haziran 2024 Salı - 13:59 (2 Hafta önce)

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:

  1. Protokol (örn. HTTP, HTTPS)
  2. Domain (örn. example.com)
  3. 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:

  1. 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 ve Access-Control-Request-Headers başlıkları bulunur.
  2. Sunucu Yanıtı:

    • Sunucu, bu preflight isteğine Access-Control-Allow-Origin, Access-Control-Allow-Methods ve Access-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.

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:

  1. 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:

  1. .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"

  1. 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"
          
      
  2. 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:

  1. 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;
      }
      
  2. 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



Yorumlar
Sende Yorumunu Ekle
Kullanıcı
0 karakter