Yer Güncelleme Komut Güvenlik Düzenle

4 Cevap php

Ben gerçek veritabanı güncelleştirmesini yapacak bir komut dosyasına veri göndermek için gereken bir Edit in Place jquery eklentisi kullanıyorum.

Bu güncelleştirmenin komut dosyası URL html kaynak yanı sıra Firebug ile kolayca görülebilir, bu yüzden güncelleme işlenmeden önce kimlik kontrol çeşit eklemeniz gerekir. Kullanıcı sadece diğer insanların kayıtları ile herhangi bir eski kimliği / alan / istedikleri değer ve karmaşa içinde geçemez böylece bu tabii ki.

Ben başlangıçta de kendi adınızı ve şifrenizi geçiyordu, ama o buna URL hepsi bir GET isteği gibi bu ideal değildir. Sitenin kendisi, en azından, ama yine de herhangi bir streç tarafından en iyi uygulama SSL değildir.

Güncellemenin bu tip doğrulamak için en iyi yolu nedir?

FWIW, güncelleştirme komut dosyası PHP ve Yeri eklenti Düzenleme şöyledir: jeditable.

Edit: netleştirmek için: gerçek veri yükü script POSTed, ancak yer eklenti düzenleme kimlik doğrulaması için hiçbir açık yöntemi vardır, bu yüzden, güncelleme komut dosyası URL parçası olarak kimlik doğrulaması geçen edildi sonra GET değişkenleri alarak ve kontrol etmek için onları kullanıyordum.

Edit 2: Evet, ben güncelleme komut oturumu bilgi erişebilir, bu yüzden sadece önceden kaydedilmiş Kullanıcı Kimliği çekmeye karar verdi ve db güncelleme ifadesinde bu kullanarak ettik. Bu en güvenli yöntem olarak görünmektedir.

4 Cevap

Ben çoğu düzenleme yerinde kullandığı pratik GET kullanmak için çok büyük olacak gibi bir POST yöntemi komut geçiş kapalı iyi olacağını düşünüyorum. Eğer bir URL parametresi olarak Sessionıd veya şifreyi kullanmak asla ve ben bir genel profil görüntüleme için bir şey ama adını kullanmak olmaz. AJAX URL bir PHP dosyası ise, ben should, bir GET veya POST dizideki ya onu geçmek gerek kalmadan oturum erişmek mümkün oldukça eminim. Ek bir not olarak, doğrulamak ve veritabanı güncellemeden önce tüm bilgileri sterilize emin olun.

Update (based on comment and question updates): Öyle gibi, Jeditable için submitdata seçenek olarak kullanıcı adı / parola geçebileceği:

$(".edit_area")
    .editable("http://www.example.com/save.php", { 
         submitdata: { userid:'johnsmith',  passwd:'god' }
         // ..other settings, etc.
      });

Hızlı ve dirty çözüm - Kirli bu düz metin olarak kullanıcının mahremlerine ortaya koyar, çünkü (Kaynağı Görüntüle ile).

Senin bu yana do farkla sanest seçeneği, kullanarak, sunucu üzerinde kimliği / oturum kimliği erişebilirsiniz.

Hmm... since you say Jeditable uses GET, I can only assume you're using the loadurl seçeneği (Jeditable kullanımlar beri $.post() değişiklikleri kaydetmek, ve $.post() always POST kullanır).

Yani, loadtype için "POST" ayarı Jeditable en anahtarlama denedim ve daha önce benzeri kullanıcı adı / parola göndermek var?

$(".edit_area")
    .editable("http://www.example.com/save.php", { 
         loadurl: 'http://www.example.com/load.php',
         loadtype: 'POST'
         // ..other settings, etc.
      });

Bu hızlı ve kirli bir çözüm gibi geliyor -. Eğer sunucu ucunda herhangi bir standart kullanıcı / oturum yönetimini yok hafife

Sadece oturumda kullanıcıyı bakarsanız sitesi Cross-Site Request Sahtecilik hala savunmasız değil mi?

Olmayan düzenlenebilir POST alanları değerlerinden hesaplanan bir tuzlanmış karma alanı eklerseniz tüm gerekli bilgileri POST olabilir. Eğer bir zaman damgası eklerseniz, siz de komut dosyası yeniden önlemek olabilir.

Örnek:

$(".edit_area")
  .editable("http://www.example.com/save.php", { 
    submitdata: { 
      userid: 'johnsmith',
      pageid: '123',  // or other value unique to the page
      timestamp: '1324354657',  // time when page loaded
      hash: '0bee89b07a248e27c83fc3d5951213c1' }
    // ..other settings, etc.
});

Karma mesela olabilir bir MD5 'johnsmith$123$1324354657$' + $secret_salt. Bu kaydetmeden önce uyduğunu kontrol edin. Çok az veya çok fazla zaman geçtiyse İsteğe bağlı reddediyoruz.

ditch-pycrypto branch of django-magicforms Django için yeniden kullanılabilir Formu temel sınıf olarak bu uygular. Bu AJAX istekleri doğrudan uygulanabilir değil, ama dokümantasyon ve birim testleri diğer uygulamaları için iyi bir temel sağlamalıdır.

Eğer gerçek GET dizesinde session id kullanması gereken bilgi aktarmak. Bu şekilde script php, oturuma bağlanmak kullanıcıyı doğrulamak ve kullanıcı onlar gönderdiniz ne düzenlemek için haklara sahip olmadığını görebilirsiniz. Onlar hak varsa o zaman, devam, ya da başka bir hata mesajı döndürür.

Ben açıkça geçirilmesi gerekmez, böylece javascript yılında, session id alabilirsiniz inanıyorum.