2015-04-08 24 views
5

böyle bir kaynak düzenlemek için bıçak ile yaptığı bir düzenlemeyi sahip korumak: haiz, eylemlaravel formu gizli alanları ve url

http://example.com/posts/edit/123 

Ve alanları ile bir form oluşturur

{{Form::model($post ,['action'=> ['[email protected]', 'id' => $post->id], 'method' => 'post'])}} 

metin ve gizli girişler

Bu URL'yi görmek, kötü niyetli bir kullanıcının diğer iletileri güncellemesi çok kolaydır.

Kimlik denetleyici ile değiştirilirse, başarısız olması için rotayı nasıl koruyabilirim? Eşleştiğinden emin olmak için kimliği belirtmek üzere yerleşik bir wat var mı? Bu, tüm gizli girdilere de uygulanabilir mi?

Teşekkür

DÜZENLEME: Benim gizli alanlar kullanıma

Bir örnek: Gönderilerim bir kullanıcı bir soruya bir cevap eklemek çalıştığında, ben gizli bir şekilde question_id set, genellikle soru ve cevapları alan ve ben kontrol etmek istiyorum manipüle değil.

+0

Bunu mu demek istediniz: http://laravel.com/docs/4.2/html#csrf-protection? –

+0

URL'lerinizi korumaya çalışmak yerine verilerinizi kimlik doğrulama ve yetkilendirme ile korumalısınız. Doğru URL'yi bilmeden kullanıcıya güvenmek yerine, bir giriş ve (gerekirse) kullanıcı izinlerini kontrol etmelisiniz – lukasgeiter

+0

Bunu zaten yaptım $ this-> abortIfLoggedUserCantEdit ($ post-> user-> id); Ben sadece daha genel bir özellik istiyorum. – SkarXa

cevap

8

Limonte cevabı diğer halklar mesajları düzenleme yeteneğini sabitlemek için doğrudur - ve bunu her zaman yapmalısınız: yöntem başlayan kontroller sırasında

kullanıcı sonrası verilen düzenlemek eğer. Sorunuzun ikinci yarısını yanıtlamak için:

Soru_kimliği gizli bir alan olarak ayarlıyorum ve kontrol edilmediğini kontrol etmek istiyorum.

sorun olduğunu sisteminize bir istemci tarafından sağlanan yapabilirsiniz asla güven verileri. her zaman'u kurcalamaya çalıştığınızı varsayalım.

controller içerisinde Sonra
{{ Form::hidden('question_id', Crypt::encrypt($question_id)) }} 

$question_id = Crypt::decrypt(Input::get('question_id')); 

Sadece rastgele bir set emin olun: Risk bunu yapmak için encryption service by Laravel kullanabilirsiniz edilir en aza indirmek için

Bir seçenek uygulama şifreleme anahtarınız app.php yapılandırma dosyasında

+0

Tüm formlarıma şifrelenmiş bir route_id ekleyeceğim ve her istekte kontrol etmek için bir filtre yerleştireceğim. – SkarXa

2

Rotayı korumak için [email protected] numaralı telefondan izin almalısınız.

public function update($postId) 
{ 
    $post = Post::findOrFail($postId); 

    if ($post->user_id !== Auth::id()) { 
     abort(403, 'Unauthorized action.'); 
    } 

    // validate, update record, etc. 
} 
+0

Bunu yapıyorum, ancak tüm düzenleme yollarım için bunu yapmanın genel bir yolunu istiyorum, ayrıca gizli alanları bu şekilde koruyamıyorum – SkarXa

+0

Tüm düzenlemeniz için bunu yapmanın bir yolu olup olmadığını bilmiyorum rotaları. Bir filtre kullanabilirsiniz, ancak parametrelerin farklı olarak adlandırıldığı başka yollara sahip olacak ve farklı ilişkilerle çalışacaksınız. Her denetleyici için 1 filtreye sahip olursunuz. – user3158900

+0

'Auth :: id()' veya 'Auth :: user() -> id' mü? – Laurence

İlgili konular