Anlayış Raylar Özgünlük Token
Birçok kez yaptığım gibi bazı konularda Özgünlük raylar Token ile ilgili çalışan, ben.
Ama gerçekten sadece gerçekten Özgünlük token anlamak istiyorum, bu sorunu çözmek ve gitmek istemiyorum. Yani benim soru, bu konu hakkında bir kaynak ya da detayları burada açıklamak için zaman harcamak istiyorsunuz?
CEVAP
Ne olur
Kullanıcı görüş formu oluşturma, Güncelleme, ya da yok bir kaynak, Raylar app oluşturur rastgele authenticity_token
, mağazalar bu token oturum ve yerler içinde gizli bir alan oluşturur. Kullanıcı formu gönderdiğinde, Raylar authenticity_token
bir oturumda depolanan karşılaştırır, ve eğer isteği devam etmek için izin verilir bunlar aynı görünüyor.
Onu neden olur
Özgünlük token oturumda depolanır, çünkü müşteri değerini bilemez. Bu uygulamanın kendisi içinde form bakmadan Rails uygulaması için form gönderme engelleyecek.
Hizmet kullandığınızı hayal edin, hizmete açmış ve her şey ok. Şimdi hizmet B kullanmak için gittiğini düşünsene, senin gibi bir resim gördün ve resmi daha büyük boyutta görüntülemek için düğmeye bastı. Şimdi, Eğer şeytani bir kod vardı servis B, belki bir istek göndermek için Bir servis (giriş), ve sormak sil hesap, gönderme isteği http://serviceA.com/close_account
. Bu CSRF (Cross Site Request Forgery) olarak bilinir.
Eğer Bir hizmet özgünlük belirteçleri kullanıyorsanız, bu saldırı yöntemi, hizmet B isteği doğru özgünlük token içermemesi, ve devam etmek için izin verilmez beri artık geçerlidir.
API docs etiketi hakkında meta: ayrıntılar açıklanır
CSRF koruması protect_from_forgery yöntemi ile açıktır hangi eğer uymamış olsaydı zaten token denetler ve oturumu sıfırlar beklenen oldu. Bu yöntemi çağrısı yeni Raylar için oluşturulur varsayılan olarak uygulamaları. Belirteç parametresi authenticity_token varsayılan olarak adlandırılır. Adı ve Bu belirteç değer kılan her düzeni eklenmelidir HTML kafasına csrf_meta_tags ekleyerek oluşturur.
Notlar
Unutmayın, Raylar sadece doğrular değil idempotent yöntemleri (POST, PUT/PATCH ve SİL). İstek özgünlük token için kontrol edilmez. Neden? istekleri OLSUN HTTP belirtimi Birleşik Devletleri idempotent ve gerekir çünküdeğiloluşturmak, değiştirmek veya sunucu kaynakları yok, ve istek idempotent (eğer aynı komut birden çok kez çalıştırırsanız, aynı sonucu her zaman almalısınız) olmalıdır.
Dersleri
authenticity_token
idempotent yöntemleri (POST, DÜZELTME ve SİLME/KOYUN) korumak için kullanın. Ayrıca emin olun herhangi bir istekleri ALMAK izin vermek için değil, sunucudaki kaynakları değiştirmek olabilir.
DÜZENLEME:the comment by @erturne ilgili kontrol istekleri idempotent olmak. Burada yaptıklarımdan daha iyi bir şekilde açıklıyor.
Nasıl özgünlük Raylar, belirli eylemle...
4 Özgünlük Token Raylar...
UYARI:'t CSRF token özgünlük rayl...
raylar - "UYARI:'t CSRF toke...
Devre raylar token 3 kapalı CSRF...