Yakın zamanda, alt alan arası ajax aramaları yapabilmek için ayarlamam Access-Control-Allow-Origin
gerekiyordu *
.
Şimdi yardım edemem ama ortamımı güvenlik risklerine soktuğumu hissediyorum.
Yanlış yapıyorsam lütfen bana yardım et.
Yakın zamanda, alt alan arası ajax aramaları yapabilmek için ayarlamam Access-Control-Allow-Origin
gerekiyordu *
.
Şimdi yardım edemem ama ortamımı güvenlik risklerine soktuğumu hissediyorum.
Yanlış yapıyorsam lütfen bana yardım et.
Yanıtlar:
İle yanıt vererek Access-Control-Allow-Origin: *
, istenen kaynak her kaynakla paylaşıma izin verir. Bu temelde, herhangi bir sitenin sitenize bir XHR isteği gönderebileceği ve sunucunun yanıtına erişebileceği anlamına gelir; bu, bu CORS yanıtını uygulamadıysanız durum böyle olmaz.
Böylece herhangi bir site, ziyaretçileri adına sitenize bir talepte bulunabilir ve yanıtını işleyebilir. Tarayıcı tarafından otomatik olarak sağlanan bir şeye (çerezler, çerez tabanlı oturumlar, vb.) Dayalı bir kimlik doğrulama veya yetkilendirme şeması gibi bir uygulamaya sahipseniz, üçüncü taraf siteler tarafından tetiklenen istekler de bunları kullanacaktır.
Bu, özellikle yalnızca seçilen kaynaklar için değil her kaynak için kaynak paylaşımına izin verirseniz, gerçekten bir güvenlik riski oluşturur. Bu bağlamda , CORS'u etkinleştirmek ne zaman güvenli? .
Access-Control-Allow-Origin: *
Bunlarda ayarlamanın herhangi bir güvenlik sorunu var mı? Nogin vs olmayacak, onlar herkese açık mı?
Access-Control-Allow-Origin: *
bu kaynak standart kimlik bilgilerinden farklı bir şeyle korunan özel veriler içermediği sürece (tanımlama bilgileri, temel kimlik doğrulama, TLS istemci sertifikaları) herhangi bir kaynağa eklemek tamamen güvenlidir .
https://example.com/users-private-data
Kullanıcının oturum açmış durumuna bağlı olarak özel verileri açığa çıkarabilecek bir düşünün . Bu durum bir oturum tanımlama bilgisi kullanır. Bu var güvenli eklemek için Access-Control-Allow-Origin: *
istek çerezler olmadan yapılırsa, bu başlık sadece tepki erişime izin verdiği, bu kaynağa ve çerezleri özel verileri almak için gereklidir. Sonuç olarak, hiçbir özel veri sızdırılmaz.
https://intranet.example.com/company-private-data
Özel şirket verilerini açığa çıkaran düşünün , ancak buna yalnızca şirketin wifi ağındaysanız erişilebilir. O var güvenli değil eklemek için Access-Control-Allow-Origin: *
standart kimlik dışında bir şey kullanılarak korunuyor gibi bu kaynağa. Aksi takdirde, kötü bir komut dosyası sizi intranete bir tünel olarak kullanabilir.
Bir kullanıcının kaynağa gizli bir pencerede erişmesi durumunda ne göreceğini hayal edin. Herkesin bu içeriği görmesinden memnunsanız (tarayıcının aldığı kaynak kodu dahil), eklemek güvenlidir Access-Control-Allow-Origin: *
.
Access-Control-Allow-Origin: *
yalnızca çerez içermeyen isteklere izin verir . Cevabı biraz açıklığa kavuşturmak için düzenledim.
AFAIK, Access-Control-Allow-Origin yalnızca sunucudan tarayıcıya gönderilen bir http başlığıdır. Bunu belirli bir adresle sınırlamak (veya devre dışı bırakmak) sitenizi örneğin robotlar için daha güvenli hale getirmez. Robotlar isterse, başlığı yok sayabilirler. Dışarıdaki normal tarayıcılar (Explorer, Chrome, vb.) Varsayılan olarak başlığı kullanır. Ancak Postman gibi bir uygulama bunu görmezden geliyor.
Sunucu tarafı, yanıtı döndürdüğünde isteğin 'kaynağının' ne olduğunu kontrol etmez. Yalnızca http başlığını ekler. Erişim kontrolü başlığını okumaya ve buna göre hareket etmeye karar veren isteği gönderen tarayıcıdır (istemci tarafı). XHR durumunda, önce başlıkları istemek için özel bir 'SEÇENEKLER' isteği kullanabileceğini unutmayın.
Bu nedenle, yaratıcı komut dosyası yazma yeteneklerine sahip herkes, içinde ayarlanmış olan tüm başlığı kolayca göz ardı edebilir.
Ayrıca bkz . Erişim-Kontrolü-İzin Ver-Menşe ayarının olası güvenlik sorunları .
Şimdi soruyu gerçekten cevaplamak için
Yardım edemem ama ortamımı güvenlik risklerine soktuğumu hissediyorum.
Herhangi biri size saldırmak isterse, Access-Control-Allow-Origin'i kolayca atlayabilir. Ancak '*' özelliğini etkinleştirerek, saldırgana, bu HTTP başlığını kullanan normal web tarayıcıları kullanmak gibi, oynaması için birkaç 'saldırı vektörü' vermiş olursunuz.
Access-Control-Allow-Origin *
şifreleri çalmak için komut dosyaları barındıran kötü amaçlı bir web sitesinde ayar yapmak kesinlikle önerilmez :-)
192.168.1.1
) HTTP isteklerinde bulunabilir ve yönlendiricinizi saldırılara izin verecek şekilde yeniden yapılandırabilir. Yönlendiricinizi doğrudan bir DDoS düğümü olarak bile kullanabilir. (Çoğu yönlendiricinin pinglere veya basit HTTP sunucu kontrollerine izin veren test sayfaları vardır. Bunlar toplu halde kötüye kullanılabilir.)
Bir joker karakter gerçekten sorunlu olduğunda, yorum olarak gönderilen 2 örnek:
Bankamın web sitesine giriş yaptığımı varsayalım. Başka bir sayfaya gidip bankama geri dönersem, hala bir çerez nedeniyle oturum açmış durumdayım. İnternetteki diğer kullanıcılar benim bankamda benimle aynı URL'lere girebilirler, ancak çerez olmadan hesabıma erişemezler. Kaynaklar arası isteklere izin verilirse, kötü niyetli bir web sitesi kullanıcıyı etkin bir şekilde taklit edebilir.
- Brad
Linksys WRT54g veya başka bir şey gibi ortak bir ev yönlendiriciniz olduğunu varsayalım. Yönlendiricinin çapraz kaynak isteklerine izin verdiğini varsayalım. Web sayfamdaki bir komut dosyası, yaygın yönlendirici IP adreslerine (192.168.1.1 gibi) HTTP isteklerinde bulunabilir ve yönlendiricinizi saldırılara izin verecek şekilde yeniden yapılandırabilir. Yönlendiricinizi doğrudan bir DDoS düğümü olarak bile kullanabilir. (Çoğu yönlendiricinin pinglere veya basit HTTP sunucusu kontrollerine izin veren test sayfaları vardır. Bunlar toplu halde kötüye kullanılabilir.)
- Brad
Problemi gerçek hayattan bir örnekle açıkladıkları için bu yorumların cevap olması gerektiğini düşünüyorum.
Sunucunun, aşağıdaki başlıkları ayarlayarak CORS'u tamamen devre dışı bırakmaya çalıştığı senaryoda.
Access-Control-Allow-Origin: * (tarayıcıya, sunucunun herhangi bir ORIGIN'den siteler arası istekleri kabul ettiğini söyler)
Access-Control-Allow-Credentials: true (tarayıcıya siteler arası isteklerin çerez gönderebileceğini söyler)
Tarayıcılarda aşağıdaki hatayla sonuçlanacak bir hata güvenliği uygulanmıştır
"Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’"
Bu yüzden çoğu senaryoda 'Erişim-Kontrol-Menşe İzin Ver' ayarını yapmak *
sorun olmayacaktır. Bununla birlikte, saldırılara karşı güvenlik sağlamak için, sunucu izin verilen kaynakların bir listesini tutabilir ve sunucu bir çapraz kaynak isteği aldığında, izin verilen kaynaklar listesine göre ORIGIN başlığını doğrulayabilir ve ardından aynı şeyi Access-Control-Allow-Origin'de tekrarlayabilir. başlığı.
ORIGIN başlığı, tarayıcıda çalışan javascript tarafından değiştirilemediğinden, kötü amaçlı site bunu yanıltamaz.