Ben bir formu doğrulamak için benzersiz anahtarlar oluşturmak için (bir blog öğretici alınan) bu sınıfı kullanın:
class formKey {
//Here we store the generated form key
private $formKey;
//Here we store the old form key
private $old_formKey;
//The constructor stores the form key (if one excists) in our class variable
function __construct() {
//We need the previous key so we store it
if(isset($_SESSION['form_key'])) {
$this->old_formKey = $_SESSION['form_key'];
}
}
//Function to generate the form key
private function generateKey() {
//Get the IP-address of the user
$ip = $_SERVER['REMOTE_ADDR'];
//We use mt_rand() instead of rand() because it is better for generating random numbers.
//We use 'true' to get a longer string.
$uniqid = uniqid(mt_rand(), true);
//Return the hash
return md5($ip . $uniqid);
}
//Function to output the form key
public function outputKey() {
//Generate the key and store it inside the class
$this->formKey = $this->generateKey();
//Store the form key in the session
$_SESSION['form_key'] = $this->formKey;
//Output the form key
// echo "<input type='hidden' name='form_key' id='form_key' value='".$this->formKey."' />";
return $this->formKey;
}
//Function that validated the form key POST data
public function validate() {
//We use the old formKey and not the new generated version
if($_POST['form_key'] == $this->old_formKey) {
//The key is valid, return true.
return true;
}
else {
//The key is invalid, return false.
return false;
}
}
}
$formKey = new formKey();
: web sitemde her şey yalak index.php ilk, bu yüzden index.php bu koymak gider
Sonra, her formda ben bu koyun: <?php $formKey->outputKey(); ?>
<input type="hidden" name="form_key" id="form_key" value="7bd8496ea1518e1850c24cf2de8ded23" />
: bu üretir
Sonra sadece if(!isset($_POST['form_key']) || !$formKey->validate())
için kontrol edebilirsiniz
Ben iki sorun var. Birincisi: Ben, yalnızca oluşturulan son tuşa doğrular kendisin sayfa başına birden fazla formu kullanabilirsiniz olamaz.
İkincisi: index.php, yeni bir anahtar oluşturur ama formunu içeren sayfaları does't çünkü her şeyi formu doğrulamak için ajax kullanmak eğer yalak ilk index.php, ilk kez doğrular gider ama nedeniyle ikinci kez değil, bu yüzden yenileme Form anahtar güncellenen değil ..
Belki SİZ işe almak için kodu / sınıf değiştirme / güncelleme yapabilirsiniz .. ben birkaç şey denedim ama işe alınamıyor? Teşekkürler!