PHP ile HTML form’ una başka bir domain ‘den gelen post isteğini önlemek
Bir HTML form’ una başka bir domain ‘den gelen post isteğini önlemek için HTTP_REFERRER veya cookie’ ler kullanılsada en iyi yaklaşım hidden(gizli) input etiketi içinde SHA1(), SHA256() veya Bcrypt ile veritabanında saklanmış bir salt değerini session id veya kullanıcı IP adresi ile birlikte kullanmaktır.
Note: salt en az 20 karakterden oluşmalıdır.
<?PHP if(isset($_POST)){ //veritabanı bağlantısı $salt = $mysqli ->query("SELECT salt FROM tablo LIMIT 1"); $sessionid= session_id(); $ipadres = $_SERVER['REMOTE_ADDR']; $gizlietiket = SHA1($salt + $ipadres + $sessionid); // Eğer PHP sürümünüz SHA246 veya Bcrypt'i destekliyorsa SHA1 yerine onlarıda kullanabilirsiniz. if($gizlietiket == $_POST['gizlietiket']){ echo 'Sitemizden post yapıldı'; } else { echo 'Alan adı farklı. Başka bir siteden post yapıldı'; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Bilgisayar.me</title> </head> <body> <?PHP //veritabanı bağlantısı $salt = $mysqli ->query("SELECT salt FROM tablo LIMIT 1"); $sessionid= session_id(); $ipadres = $_SERVER['REMOTE_ADDR']; $gizlietiket = SHA1($salt + $ipadres + $sessionid); // Eğer PHP sürümünüz SHA246 veya Bcrypt'i destekliyorsa SHA1 yerine kullanabilirsiniz. ?> <form id="form1" name="form1" method="post" action="?"> <input type="hidden" name="gizlietiket" id="gizlietiket" value="<?PHP echo $gizlietiket?>"/> İsim <input type="text" name="isim"/> Adres <input type="text" name="adres"/><br /> <input name="" type="submit" value="Gönder"/> </form> </body> </html>