Betiklerimize istemediğimiz yerlerden form verilerinin gönderilmesiyle ortaya çıkar.
Aşağıdaki gibi bir formumuz(form.php) olsun:
<form action="formIsle.php" method="POST"> <input type="radio" name="medeniHali" value="bekar" checked="checked"> <input type="radio" name="medeniHali" value="evli"> <input type="radio" name="medeniHali" value="dul"> <input type="submit" value="Gönder" /> </form>
Bu formu işleyen sayfamız(formIsle.php) ise aşağıdaki gibi olsun, formdan gelen medeni hali bilgisini yazdırıyor.
1 2 3 4 | <?php echo $_POST['medeniHali']; // Çıktı: bekar ?> |
Saldırganın aşağıdaki formu(form.php) kendi bilgisayarından gönderdiğini varsayalım. Formun action özelliğine tam adresi yazıyor.
1 2 3 4 | <form action="http://www.siteadresi.com/formIsle.php" method="POST"> <input type="text" name="medeniHali" value="yalancı"> <input type="submit" value="Gönder" /> </form> |
Form işleyen(formIsle.php) sayfamız yukarıda gönderilen formu işler.
1 2 3 4 | <?php echo $_POST['medeniHali']; // Çıktı: yalancı ?> |
Medeni hali, bekar-evli-dul değerlerinden birini alması gerekirken, “yalancı” diye bir değer almıştır.
Bunu önlemek için tek kullanımlık bir şifre oluşturulabilir:
1 2 3 4 5 6 7 8 9 10 11 | <?php $formAnahtar = rand(10000,1000000); $_SESSION['formAnahtar'] = $formAnahtar; ?> <form action="http://www.siteadresi.com/formIsle.php" method="POST"> <input type="radio" name="medeniHali" value="bekar" checked="checked"> <input type="radio" name="medeniHali" value="evli"> <input type="radio" name="medeniHali" value="dul"> <input type="hidden" name="formAnahtar" value="<?php echo $formAnahtar; ?>"> <input type="submit" value="Gönder" /> </form> |
Formu işleyen(formIsle.php) sayfamız:
1 2 3 4 5 6 7 | <?php if($_SESSION['formAnahtar'] == $_POST['formAnahtar']) echo $_POST['medeniHali']; else echo "Bu form başka bir yerden geliyor."; ?> |