Yinelenen form gönderimleri Önlenmesi

0 Cevap php

Ben sayfa geri / ileri gidiyor ya da ferahlatıcı yinelenen form gönderimini önlemek için bir teknik ile geldi. Ve ben zaten örnek bir üretim ortamında, siz belirleyebilir kusurları ne değildir test, burada duscussing düşündünüz?

CSRF saldırılarına karşı savunmak, hangi ben Form Simgeleri kullanarak iyi farkında olduğumu unutmayın, ve aşağıdaki adımları ilave değildi lütfen.

-Üret her form için Form kimliği ve formda o kadar gizli bir alanı kullanabilirsiniz:

$formid = microtime(true)*10000;

- On form submit,

  • Verileri doğrulamak

  • Form alanları özetini hesaplar veri

    $allvals = '';
    foreach($_POST as $k=>$v){
        $allvals .= $v;
    }
    $formHash = sha1($allvals);
    
  • Önceden kaydedilmiş karmaları ile karşılaştırarak formu karma doğrulayın. Oturum değeri $ formID değişken tarafından her form binded edilir.

    $allowAction = true;
    if(isset($_SESSION['formHash'][$_POST['formid']]) && ($_SESSION['formHash'][$_POST['formid']] == $formHash)){
         $allowAction = false;
    }
    
  • Form karma bulunamaması halinde, bu ilk kez gönderilen form veya form verileri değişti demektir.
  • Veriler (örneğin, veritabanına) kaydedilmiş ise, oturuma form hash kaydedin:

    $_SESSION['formHash'][$_POST['formid']] = $formHash;
    

Full version of the code: http://thebusy.me/2011/01/06/preventing-duplicate-form-submissions/

0 Cevap