php CSRF önleme

2 Cevap php
  1. Requiring authentication in GET and POST parameters, not only cookies;

  2. HTTP Referer başlığını kontrol etmek;

wikipedia bu yazı gördüm ve bunları uygulamak nasıl merak edildi

Tamam ... Ben Kohana PHP framework kullanıyorum ve yönlendirme başlığını belirlemek için tesis var, ama yönlendirme başlığı ben tam olarak ne kontrol edebilirim? çerçeve işlevi yalnızca yönlendirme URL'sini döndürür

ve nasıl GET ve POST params doğrulamak mı? Neye karşı? depolanmış bilgiler? beklenen türü?

2 Cevap

CSRF önlemek için bir kerelik belirteci, POST'ed ve geçerli oturum ile ilişkili doğrulamak isteyeceksiniz. Aşağıdaki gibi bir şey. . .

Kullanıcı istekleri bir kaydı silmek için sayfada:

confirm.php

<?php
 session_start();
 $token= md5(uniqid());
 $_SESSION['delete_customer_token']= $token;
 session_write_close();
?>
<html>
<body>
<form method="post" action="confirm_save.php">
 <input type="hidden" name="token" value="<?php echo $token; ?>" />
Do you really want to delete?
<input type="submit" value=" Yes " />
<input type="button" value=" No " onclick="history.go(-1);" />
</form>
</body>
</html>

>

Sonra aslında kayıt silme söz konusu olduğunda:

confirm_save.php

<?php
 session_start();
 $token = $_SESSION['delete_customer_token'];
 unset($_SESSION['delete_customer_token']);
 session_write_close();
 if ($token && $_POST['token']==$token) {
   // delete the record
 } else {
   // log potential CSRF attack.
 }
?>

Belirteç, tahmin etmek zor, her silme istek için benzersiz, $ _POST sadece aracılığıyla kabul olması ve bir kaç dakika (son bu örnekte gösterilmemiştir) sonra sona gerekir.

Referans kontrol ile tüm yapıyorsa referer sitenizin / sisteminizden emin olmak için arıyor. Referer var ya da yabancı bir siteden yoksa o referal onay başarısız olur ve yapılıyor olursa olsun isteği onurlandırmak istemeyebilirsiniz.

Çeşitli teknolojiler ve tarayıcılar ile geçmiş sorunları (flash.. Vd) referal başlıkları sahteciliğin izin verdi. Düşünün onun bir şey. Istek başlığında geçirilen referal veri mevcut değildir kaynaklara / bağlamak için javascript kullanarak çeşitli yöntemler vardır.

Bu davranış, biraz tarayıcılar arasında değişmektedir. Eğer genellikle Tamam bir formu göndermek için javascript kullanın. Eğer window.location gibi bir şey kullanırsanız büyük olasılıkla referal veri mevcut olması beklememelisiniz.

CSRF önlenmesi için popüler bir yöntem çerezleri kullanmak ve her zaman referansları arasında durumunu geçmek ... Bir uygulama boyunca tüm bağlantıların bir oturum belirteci Passing etmektir.