En son web geliştirme öğreticiler
 

PHP 5 Form Doğrulama


Bu ve sonraki bölümlerde form verilerini doğrulamak için PHP nasıl kullanılacağını gösterir.


PHP Formu Doğrulama

PHP formları işlerken GÜVENLİK düşünün!

Bu sayfalar Güvenlik ön planda PHP formları işleme nasıl gösterecektir. form verilerini doğru doğrulama korsanları ve spam formunuzu korumak için önemlidir!

zorunlu ve isteğe bağlı metin alanları, radyo düğmeleri, ve bir gönderme düğmesi: bu bölümlerde çalışan edilecektir HTML formu, çeşitli giriş alanları içerir:

aşağıdaki gibi form için doğrulama kuralları yukarıda şunlardır:

Alan Doğrulama Kuralları
isim Gereklidir. + Sadece harf ve boşluk içermelidir
E-mail Gereklidir. + Geçerli bir e-posta adresi içermelidir (with @ and .)
Web sitesi İsteğe bağlı. Bu özellik varsa, geçerli bir URL içermelidir
Yorum Yap İsteğe bağlı. Çok hatlı giriş alanı (textarea)
Cinsiyet Gereklidir. birini seçmelisiniz

Önce form için düz HTML kodu bakacağız:


Metin Alanları

ad, e-posta ve web sitesi alanları metin girişi öğeleridir ve yorum alanı bir textarea olduğunu. HTML kodu şöyle:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Radyo Düğmeleri

cinsiyet alanları radyo düğmeleri ve HTML kodu şöyle:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

Form Element

Formun HTML kodu şöyle:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

form gönderildiğinde, form veri yöntemi = "post" ile gönderilir.

$ _SERVER [ "PHP_SELF"] değişkeni nedir?

$ _SERVER [ "PHP_SELF"] Geçerli betiğin dosya adını döndüren bir süper küresel değişkendir.

Yani, $ _SERVER [ "PHP_SELF"] yerine farklı bir sayfaya atlama, sayfanın kendisine gönderilen form verilerini gönderir. Bu şekilde, kullanıcı formla aynı sayfada hata iletilerini alırsınız.

Nedir htmlspecialchars() işlevi?

htmlspecialchars() işlevi HTML öğeleri özel karakterleri çevirir. Bu HTML karakterleri değiştirmek anlamına gelir gibi <ve> ile & lt; ve ve gt ;. Bu HTML veya JavaScript kodunu enjekte ederek kodunu kullanan saldırganları engellemektedir (Cross-site Scripting attacks) formlarda.


PHP Formu Güvenlik Big Not

$ _SERVER [ "PHP_SELF"] değişkeni korsanları tarafından kullanılabilir!

PHP_SELF sayfanıza kullanılırsa o zaman bir kullanıcı bir çizgi girebilirsiniz (/) ve sonra bazı Cross Site Scripting (XSS) icra edecek komutanlıklar.

Cross-site scripting (XSS) tipik Web uygulamaları bulunan bilgisayar güvenlik açığı türüdür. XSS diğer kullanıcılar tarafından görüntülenen Web sayfaları içine istemci tarafı komut dosyası enjekte etmek saldırganların sağlar.

Biz adlı bir sayfasında aşağıdaki formu var varsayalım "test_form.php" :

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Bir kullanıcı gibi adres çubuğuna normal URL girerse Şimdi, "http://www.example.com/test_form.php" , yukarıdaki kod çevrilir:

<form method="post" action="test_form.php">

Çok uzak çok iyi.

Ancak, bir kullanıcı adres çubuğuna aşağıdaki URL'yi girdiği göz önünde bulundurun:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

Bu durumda, yukarıdaki kod çevrilir:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Bu kod, bir komut dosyası etiketi ve bir uyarı komutu ekler. Sayfa yüklendiğinde, JavaScript kodu çalıştırılacaktır zaman (the user will see an alert box) . Bu PHP_SELF değişken istismar nasıl sadece basit ve zararsız bir örnektir.

Herhangi bir JavaScript kodu içine eklenebilir farkında olun <script> etiketi! Bir hacker başka bir sunucuda bir dosyaya kullanıcıyı yönlendirebilir ve bu dosya küresel değişkenleri değiştirebilir veya örneğin, kullanıcı verilerini kaydetmek için başka bir adrese formu gönderebilirsiniz zararlı kod tutabilir.


Nasıl $ _SERVER [ "PHP_SELF"] Exploits'e kaçının?

$ _SERVER [ "PHP_SELF"] patlatır kullanılarak önlenebilir htmlspecialchars() işlevi.

Form kodu aşağıdaki gibi görünmelidir:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() işlevi HTML öğeleri özel karakterleri çevirir. kullanıcı PHP_SELF değişkeni yararlanmaya çalışan Şimdi, eğer aşağıdaki çıkışı neden olur:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

Girişimi başarısız istismar ve hiçbir zarar yapılır!


PHP ile Form Verilerini doğrula

Yaptığımız ilk şey PHP'nin aracılığıyla tüm değişkenleri geçmektir htmlspecialchars() işlevi.

Kullandığımız zaman htmlspecialchars() fonksiyonu; Daha sonra bir kullanıcı bir metin alanına aşağıdaki göndermeyi denemesi durumunda:

<Script> konum. href('http://www.hacked.com') </ script>

- HTML böyle kod kaçmış gibi kaydedilebilir çünkü bu, idam edilmeyeceği:

& Lt; komut ve gt; Yer. href('http://www.hacked.com') ve m / komut ve gt;

kod artık bir sayfada veya e-posta içinde görüntülenecek güvenlidir.

Kullanıcı formu gönderdiğinde Ayrıca iki şey daha yapacağız:

  1. Şerit gereksiz karakterler (extra space, tab, newline) kullanıcı girişi verilerinden (with the PHP trim() fonksiyonu)
  2. Eğik çizgi çıkarın (\) kullanıcı giriş verisinden (with the PHP stripslashes() işlevi)

Bir sonraki adım bizim için denetimi yapacak bir işlev yaratmaktır (which is much more convenient than writing the same code over and over again) .

Biz fonksiyonu adlandırır test_input() .

Şimdi, her $ _POST değişkeni kontrol edebilirsiniz test_input() fonksiyonu ve komut dosyası aşağıdaki gibidir:

Örnek

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>
»Run örnek

yazılı kaydın başlangıcında dikkat edin, biz form [ "REQUEST_METHOD"] $ _SERVER kullanılarak sunulmuştur olmadığını kontrol edin. REQUEST_METHOD POST ise, o zaman formu gönderildikten - ve valide edilmelidir. eğer ibraz edilmemişse, doğrulamayı atlayabilir ve boş bir forma görüntüler.

Ancak, yukarıdaki örnekte, tüm girdi alanlar isteğe bağlıdır. Kullanıcı herhangi bir veri girmek olsa bile komut çalışıyor.

Bir sonraki adım gerekli giriş alanları yapmak ve gerekirse hata iletileri oluşturmaktır.