Kimlik bilgilerini komut satırından güvenli bir şekilde geçirebilir miyim?


2

Bunu başka bir foruma göndermem gerektiğini düşünmeden önce - bu Windows işletim sistemi ile ilgili bir soru, programlama değil.

Kerberos üzerinden kullanıcının yetkilendirmesi gereken intranet web sitesi oluşturuyorum. Araştırma günlerinden sonra bunun için PHP'yi kullanmanın gerçekten en iyi yol olmadığını ve başka bir çözüm bulmam gerektiğini düşünüyorum. Bu yüzden, gerçekten işe yarayan bu fikre sahibim: Benim için çalışmak için .NET Framework'ü kullanmak için bilgilerimi C # ile kullanabilirim. Bu yüzden (şimdilik) Kerberos'u kullanıcı kimlik bilgilerini kontrol etmek için kullanan küçük bir uygulama yazdım. Geri dönüş kodunu kontrol etmek için PHP'den uygulama çalıştırdım:

MyApplication.exe kullanıcı_adı şifre1!

(yakın bir gelecekte komut satırından daha fazla bilgi alacaktır)

Yetki kontrolüne dayalı kod döndürür, böylece PHP uygulamam başarılı olup olmadığını bilir. Kerberos yetkilendirmesi şifreli (bu .NET ile süper kolaydı), bu yüzden "bir taşla iki kuş" var. Tabii ki, tüm süreç daha karmaşık, bu yüzden kullanıcı oturum açtığında her seferinde kullanmama gerek kalmıyor, ama burada mesele bu değil.

Sorular soruyorum, çünkü yararlı bir şeyler öğrenebilirim ve emin olmak istiyorum:

Bu yaklaşım gerçekten güvenli mi? Komut satırına geçirdiğim şifreyi kimse alabilir mi? Bir yere kaydedilebilir mi? Ve eğer evet - bunu önleyebilir miyim? Bu güvenli değilse - kimlik bilgilerini daha güvenli bir şekilde iletebilir miyim?

Bu gerçekten sadece bir soru "Bu güvenli mi?" ama sana ne istediğime dair bir fikir vermek istiyorum. İyi bir fikir olduğundan emin olmadıkça bu konuda fazla ileri gitmek istemiyorum. Ayrıca, şimdiye kadar her şey mükemmel çalışıyor.

Apache sunucusunu MySQL veritabanıyla birlikte Windows Server'da kullanıyorum (muhtemelen MSSQL Express olarak değişecektir).

[DÜZENLE] Kullandığımı belirtmeliyim exec () PHP'de komut. Bir şekilde Apache hizmetinin başlatılması / çalıştırılması arasında bir iletişim kurabilecek misiniz? MyApplication.exe , çünkü parola bir kereye mahsus yalnızca orada düz metin olarak geçirilir.


İntranet kimlik doğrulaması için, muhtemelen Kerberos ile doğrudan iletişime geçin veya etki alanınız üzerinden kimlik doğrulaması yapmak için SAML veya OAuth gibi bir protokolü kullanın (şemada Amazon'un SAML belgeleri faydalı olabilir).
Xiong Chiamiov

Yanıtlar:


1

Hayır, bu yaklaşım güvensiz. Windows'ta komut satırı argümanları kullanıcı haklarıyla korunmaktadır (teknik olarak işlem nesnesine erişim ile ilgilidir), ancak bu yeterli değildir. Web uygulamanızda rasgele kod / komut yürütülmesine izin veren bir hata olabilir.

Bunun yerine, şifreyi "girmek" için stdin kullanın. Elbette, bu aradığınız uygulamanın şifreyi bu şekilde beklemesini bilmesini gerektirir.

Ayrıca, kullanıcı tarafından sağlanan komut satırı argümanlarını iletme konusunda çok dikkatli olmanız gerekir. ; rm -rf / kullanıcı adı olarak. ;)


Bu arada: Bu yöntem, dönüş değerlerini agresif bir şekilde önbelleğe almadığınız sürece önemli performans etkilerine sahip olacaktır.


kullanıyorum exec () PHP'de işlev. Güvenli modu "Notlar" bölümünde belirtilen şekilde kullanabilirsiniz. Ayrıca, kullanıcı kimlik bilgilerini saklamıyorum, yalnızca doğrudan "myapp.exe" dosyasına iletin, etki alanında (Kerberos protokolü tarafından şifrelenmiş) yetkilendirme yapıp yapamayacağınızı kontrol edin ve yalnızca kodu (başarılı olmak için 0 ve diğer hatalar için) verir. Ayrıca, dediğim gibi, bunun arkasında daha fazla mantık var. Sadece argümanları iletmez, çünkü ilk önce kullanıcının veritabanında olup olmadığını kontrol etmeniz gerekir. Ayrıca, kullanıcılar yöneticiler tarafından oluşturulduğundan, "herkes için ücretsiz" bir uygulama değildir.
hagier

Cevabınız için küçük düzenleme yaptım. Umarım şimdi daha açıktır. :)
hagier

Güvenli mod çoktan gitti. Ayrıca, “kimlik bilgilerini” saklamakla da ilgili değil. Bir işlemin komut satırında görünüyorlarsa, uygulamanızın kontrolünü terk etmişlerdir. Bu en önemli nokta.
Daniel B

Güvenli mod hakkında iyi nokta. Ama yine de sorumun bir amacı şudur: Bu iletişimi kesmenin ve bir şifreye erişmenin bir yolu var mı? Kendimi komutları / betiği kullanıcı adı üzerinden çalıştırmaktan koruyabilirim.
hagier

1
Standart Girdi, cevabımı yazdığım gibi. Görev Yöneticisi veya İşlem Gezgini gibi en sevdiğiniz görev yöneticisini kullanarak komut satırı parametrelerini görüntüleyebilirsiniz. İşlem komut satırı genel bilgi olarak kabul edilmelidir.
Daniel B
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.