Güvenliğini nasıl, HTTPS olmadan giriniz?

10 Cevap php

HTTPS bir güvenlik önlemi olarak kullanılabilir olmadığında bir WebApplication için, hala giriş biraz güvenli hale getirmek mümkün mü? Örneğin:

  • Tokenize giriş, tekrar saldırıları zorlaştırmak için?
  • Her nasılsa bir HTML şifre alanından gönderilen şifresini şifrelemek?

Özellikle ben (sağlanan kullanıcı adı ve şifre içerir) kimlik tetiklemek CakePHP'ye ve bir AJAX POST çağrısı kullanıyorum.

Sorunun üzerinde güncelleme:

  • HTTPS kullanılamaz. Dönemi. Eğer durum beğenmezseniz, bu teorik bir soru düşünün.
  • Orada hiçbir açık gereksinimleri ne olursa olsun, HTTP, PHP ve bir tarayıcı (çerezler, JavaScript vb) sahip, gerçek yaşamda (sihirli RSA ikili, PGP eklentileri) sunar.
  • Soru Eğer this durumdan yapabilirsiniz, iyi olduğunu, ne olduğunu, bu şifreler düz metin gönderme daha iyidir. Her tür çözümlerin sakıncaları bilmek bir artı.
  • Düz şifreler daha Amy gelişme açığız. Biz% 100 l33tG0Dhx0r-proff çözüm için amaç yoktur. Kırmak zor daha iyi olduğu hack karmaşık daha iyidir önemsiz bir şifreyi ortaya koklama.

10 Cevap

Böyle bir temel güvenlik ihtiyacı vermezseniz If HTTPS isn't available on your system, then find a hosting company that cares about security., sonra onlar ne diğer güvenlik ihtiyaçları eksik?

Kısa cevap HTTPS sadece şifreleyerek şifreler çok daha yapmasıdır. Bir diğer önemli rolü, bir MITM saldırıda kötü amaçlı bir sunucuya şifrenizi vererek engel gerektiğidir. Yalnız parola korumak için bir sistem kullanarak hala tüm saldırganın ihtiyaç olduğu düz metin oturum kimlik verici olurdu çünkü hala OWASP A9 - Insufficient Transport Layer Protection bir ihlalidir (Firesheep).

1) "dizgeciğe giriş": Bir saldırganın onlar düz metin kullanıcı adı / parola gerekecek trafik kokluyor ve sonra da sadece normal giriş yapabilirsiniz eğer bu, önemli değil.

2) "nasılsa gönderildi şifresini şifrelemek:" kişinin bir saldırganın oturum açtıktan sonra geçerli oturum kimliği (cookie) almak için trafiği dinleyebilir ve bütün oturum ardından SSL ile korunan, o sadece yerine içeri giriş Bu kullanabilirsiniz Bu bir sorun değildir.

Bu sistemi ve mevcut SSL altyapısı hem de etkiler diğer daha compelx saldırılar vardır. SSLStrip saldırı daha ayrıntılı gider. Ben çok Moxie Marlinspike en Blackhat 2009 konuşmayı izlerken öneririz.

Eğer önerisi olarak, benzersiz bir belirteç sayfa oluşturulur her zaman üretmek mümkün olabilir. Aynı simge form verileri ile geri gönderilecek ve yeniden olamazdı gerekir. Eğer bu kullanıcılar tarafından etkinleştirilmiş olması güvenebilirsiniz varsa da, bunu karma için JavaScript kullanarak güvenli parola tutmak olabilir.

Bu düzen, ancak yine de güvenli değildir. Saldırgan, hala her şey tel üzerinden gidiyor görebiliyordu. Onlar belirteci müdahale ve kullanıcı yok önce size geri bir yanıt gönderebilir. Ya da sadece, giriş o kişinin kimlik bilgilerini çalmak (onlar tel üzerinden gönderilir gibi), ve sadece daha sonra kendi giriş isteği yapmak için birini beklemek olabilir.

Bottom Line - Eğer sitenin güvenli olduğunu garanti etmek için HTTPS kullanmanız gerekir.

Eğer web sunucusunda SSL yapamaz, ve bir güvenlik uzmanı olmadığı için, size kullanabileceği varolan bir güvenli kimlik doğrulama hizmeti için bakmak ve onları SSL ve sizin için kimlik bilgilerini işleme karmaşıklığı hem de halledeyim.

Özellikle, bu tür OpenID olarak ücretsiz bir üçüncü taraf kimlik doğrulama servisini kullanmak öneririz. Bu PHP CakePHP için bir de dahil olmak üzere kütüphaneleri vardır.

Kısa cevap şifreleme son noktasını SSL bitiş olmadan, güvenli bir şekilde bunu yapmak imkansız olduğunu ...

Bunun temel nedenlerinden biri, bir tarayıcıda güvenli kripto yapamaz olmasıdır. Bkz this reference - Javascript Cryptography Considered Harmful.

Ayrıca, kimlik kaynağı konuştuğunuz kim gerçekten emin olabilirsiniz yolu yoktur. Hiçbir şekilde oluyor Man-In-The-Middle Attack var değil emin olmak için SSL olmadan kesinlikle var anlamına gelir.

Yani hayır, bunu yapamam.

Ayrıca, hatta çalışmayın. SSL alın. Sen özgür sertifikaları alabilirsiniz. Sunucular genellikle bir kaç $ $ $ aylık için özel bir IP verecektir. Eğer gerçekten güvenliğe önem Ve eğer, yine özel bir IP adresi ile en az bir VM kullanıyor olurdu.

Hatta bu en iyi Security Through Obscurity olacak teşebbüs, ve hiçbir şey de kötü. SSL çözülmüş bir sorundur. Neden bu çözümü kullanmayın. Güvenlik tahmin etmek bir şey değildir. Uygun teknikleri kullanın. Kendi icat etmeye çalışmayın. Bu işe yaramaz ...

Çoğu tarayıcılar tarafından desteklenen ve tel üzerinde açık olarak şifre göndermek değil HTTP Digest kimlik doğrulaması kullanabilirsiniz.

Dezavantajı broswer tarafından görüntülenen kutuya çirkin günlüğü. Eğer formları ile sopa preffer eğer, o zaman formları authnetication HTTP Digest tam olarak aynı protokolü uygulayabilirsiniz: bölge ve meydan okuma içeren gizli alanlar göndermek ve istemci JavaScript seferlik ekleyin ve özetini hesaplamak var. Bu şekilde kendi rulo yerine, iyi bilinen ve kanıtlanmış exhange protokolünü kullanacağız.

HTTP Digest sadece karma işlemleri gerektirir.

Peki HTTP Digest Authentication? Bu sunucuya göndermeden önce MD5 karma kullanıcı adı, şifre ve (diğer şeyler arasında) bir seferlik güvenlik sağlar. MD5 gerçekten güvenli değildir, ancak HTTP basit güvenlik için iyi bir yoldur.

Tabii bu mesajı değiştirerek korsanları engellemek değil ... ama şifrenizi korur.

Sen Javascript kullanarak şifresini şifrelemek ve sunucuda şifresini çözebilir.

Sonra JavaScript ortak anahtarını kullanarak, tuz ile birlikte, parolayı şifrelemek, tarayıcıya bir zamanlanmış tuz ile birlikte kamu anahtarını göndermek, sunucu üzerinde bir RSA keypair üreten öneriyoruz.

Sen here JavaScript bir RSA uygulaması bulabilirsiniz

IP adresini ve proxy arkasında çerez hırsızlığı önlemek için kimlik doğrulama çerezleri tüm X-FORWARDED-FOR hedaer hem de içermelidir.

If you're dealing with sensitive data, you could generate a random AES key in Javascript, then send it to the server along with the password encrypted with RSA.
You could then make the entire application use encrypted AJAX requests from a single page and not use an auth cookie at all.

Bu SSL olmadan aktif man-in-the-orta saldırıya karşı koruma mümkün değildir unutmayın. Etkin bir saldırganın tamamen kendi proxy ile sitenizi değiştirebilirsiniz, ve buna karşı savunmak için herhangi bir yolu yoktur. (Bilinen herhangi bir iyi kod olamaz beri)

Ben biraz güvenli HTTP bağlantıları için gördüğüm en iyi çözüm düz metin parola iletimini engellemek için md5sum bir JavaScript uygulaması (veya başka bir hash) kullanmaktır. Sen orijinal değerinin bir karma ile parola alanını değiştirir JavaScript form onsubmit işleyicisi oluşturabilirsiniz. Bu bir bağlantı güvensiz bir güvenlik mütevazı miktarda ekler, ancak düzgün çalışması için tarayıcıda çalışan JavaScript dayanır.

"The Secure Remote Password Protocol" bakabilirsiniz.

Bunun yerine kendimi formüle, bana kendi webite alıntı atalım:

Güvenli Uzaktan Şifre protokol kısa insan memorizable şifreleri güvenli uzaktan kimlik doğrulaması gerçekleştirir ve hem pasif ve aktif ağ saldırıları direnir.

ve:

[] Protokol asimetrik anahtar değişimi protokolleri ile sıfır-bilgi delillerinden tekniklerini birleştiren ve bu Augmented EKE veya B-Speke gibi çalıntı-doğrulayıcı saldırılara karşı nispeten güçlü genişletilmiş yöntemleri üzerinde önemli ölçüde geliştirilmiş performans sunar.

Stanford Üniversitesi PHP ve JavaScript Uygulamaları kendilerini sağlamaz rağmen, bazı 3. parti uygulamalara bağlantı.

Bu bağlantılardan biri bir online şifre yöneticisidir ki, "Clipperz" yol açar. Ayrıca GitHub bir topluluk versiyonu olarak kullanılabilir. Orada PHP ve Python ile yazılmış backends içeren protokolü ve "password-manager" kendisi, uygulayan, kendi "javascript-crypto-library" barındırmak.

Ben bu kodu ilgili bölümlerini ayıklamak için ne kadar zor olacağını söyleyemeyiz, ama belki (o AGPL altında lisanslıdır) uygulanmasını yeniden kullanabilirsiniz.

Bu pratik olarak kolay bir şey değildir.

But you could play with other crypto system that is designed for unencrypted connection, maybe sign all your data with pgp or something like that.

But you still may have a problem with "man in the middle" attacks, if you only encrypt the login data. (someone could just resend that data and also get access).

Yani bu basit (ya da daha güvenli) hale bakın ki https olamaz.