PHP Form Kullanımı Doğrulama işlemi (1 Viewer)

Joined
Jul 2, 2018
Credits
11
Rating - 0%
Php ile Forum Doğrulama işlemi

Php ile yeni forumlar yaparken güvenliğinizi ön planda tutun
PHP formlarının güvenliğini göz önünde bulundurarak size nasıl işleneceğini göstermeye çalışacağım Form verilerinin doğru şekilde doğrulanması formunuzu korsanlardan ve spam gönderenlerden korumak için önemlidir
Bu bölümlerde çalışacağımız HTML formu çeşitli giriş alanları içerir zorunlu ve isteğe bağlı metin alanları, radyo düğmeleri ve gönder düğmesi olacak şekilde forum png örneği hazırladım


4pqX87.png


Yukarıdaki form için doğrulama kuralları aşağıdaki gibidir:

Adı Gereklidir. + Yalnızca harf ve boşluk içermemelidir
E-mail Gereklidir. + Geçerli bir e-posta adresi içermelidir (@ ve. İle)
Website İsteğe bağlı. Varsa geçerli bir URL içermelidir
Yorum İsteğe bağlı. Çok satırlı giriş alanı (textarea)
Cinsiyet Gereklidir. Bir tane seçmeli


İlk önce formun düz HTML koduna bakalım

Forum Metin Alanları
Ad, e-posta ve web sitesi alanları metin girişi öğeleridir ve yorum alanı bir textarea'dır. HTML koduyla böyle görünürler

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


Forum Radyo Düğmeleri
Cinsiyet alanları radyo düğmeleridir ve HTML koduyla böyle görünürler

Cinsiyet:
<input type="radio" name="gender" value="female">Kadın
<input type="radio" name="gender" value="male">Erkek
<input type="radio" name="gender" value="other">Diğer


Forum Elemanı
Formun HTML koduyla böyle görünürler

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

Bir Form gönderildiğinde, form verileri = "post" methodu ile gönderilir

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

$ _SERVER ["PHP_SELF"] o anda çalışmakta olan betiğin dosya ismini döndüren genel bir değişkendir.

Bu nedenle, $ _SERVER ["PHP_SELF"], gönderilen form verilerini farklı bir sayfaya atlamak yerine sayfaya gönderir. Bu sayede, kullanıcı form ile aynı sayfada hata mesajlarını alır


Htmlspecialchars () işlevi nedir?

Htmlspecialchars () işlevi, özel karakterleri HTML varlıklarına dönüştürür. Bu, <ve> gibi HTML karakterlerini & lt; ve & gt; Bu, saldırganların formlara HTML veya Javascript kodunu Siteler Arası Komut Dosyası saldırıları enjekte ederek kodu kullanmalarını engeller.


PHP Form Güvenliği
$ _SERVER ["PHP_SELF"] değişkeni bilgisayar korsanları tarafından kullanılabilir!

Sayfanızda PHP_SELF kullanılıyorsa, kullanıcı bir eğik çizgi (/) girebilir ve ardından bazı Siteler Arası Komut Dosyası Çalıştırma (XSS) komutlarını çalıştırabilir.

Siteler arası komut dosyası çalıştırma (XSS), genellikle Web uygulamalarında bulunan bir tür bilgisayar güvenlik açığıdır. XSS, saldırganların diğer kullanıcılar tarafından görüntülenen Web sayfalarına istemci tarafı komut dosyası eklemelerini sağlar.

"Test_form.php" adlı bir sayfada aşağıdaki forma sahip olduğumuzu varsayalım:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Şimdi, bir kullanıcı "http://www.example.com/test_form.php" gibi adres çubuğuna normal URL’yi girerse, yukarıdaki kod şuna çevrilecektir:

<form method="post" action="test_form.php">
Çok uzak çok iyi.

Ancak, bir kullanıcının adres çubuğuna aşağıdaki URL'yi girdiğini düşünün:

http://www.example.com/test_form.php/"><script>alert('hacked')</script>
Bu durumda, yukarıdaki kod aşağıdakilere çevrilecektir:

<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 (kullanıcı bir uyarı kutusu görecektir). Bu, PHP_SELF değişkeninin nasıl kullanılabileceği konusunda basit ve zararsız bir örnektir.

Farkında olun herhangi bir JavaScript kodu <script> etiketi içinde eklenebilir! Bir bilgisayar korsanı, kullanıcıyı başka bir sunucudaki bir dosyaya yönlendirebilir ve söz konusu dosya, kullanıcı verilerini kaydetmek için genel değişkenleri değiştirebilecek veya formu başka bir adrese gönderebilecek kötü amaçlı kod tutabilir.

$ _SERVER ["PHP_SELF"] Kullanımından Nasıl Kaçının?
$ _SERVER ["PHP_SELF"] istismarlarından htmlspecialchars () işlevi kullanılarak kaçınılabilir.


Form kodu şöyle görünmelidir:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Htmlspecialchars () işlevi, özel karakterleri HTML varlıklarına dönüştürür. Şimdi kullanıcı PHP_SELF değişkeninden yararlanmaya çalışırsa, aşağıdaki çıktıya neden olur:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">
Yararlanma girişimi başarısız olur ve zarar verilmez!


PHP ile Form Verilerini Doğrulama
Yapacağımız ilk şey, tüm değişkenleri PHP'nin htmlspecialchars () işlevinden geçirmektir.

Htmlspecialchars () işlevini kullandığımızda; daha sonra bir kullanıcı aşağıdakileri bir metin alanına göndermeye çalışırsa:

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

- bu yürütülmez, çünkü HTML çıkış kodu olarak kaydedilir:

& Lt; komut ve gt; location.href ( 'http://www.hacked.com') elde edildi / komut ve gt;

Kod artık bir sayfada veya bir e-postanın içinde görüntülenmek için güvenlidir.

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

Gereksiz karakterleri (fazladan boşluk, sekme, yeni satır) kullanıcı girişi verilerinden soyun (PHP trim () işleviyle)
Kullanıcı giriş verisinden ters eğik çizgileri (\) kaldırın (PHP stripslashes () işleviyle)
Bir sonraki adım, bizim için tüm kontrolleri yapacak bir fonksiyon yaratmaktır (bu aynı kodu tekrar tekrar yazmaktan daha uygundur).

Test_input () ismini isimlendireceğiz.

Şimdi, her $ _POST değişkenini test_input () işleviyle kontrol edebiliriz ve komut dosyası böyle görünürler




<?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;
}
?>


Komut dosyasının başında, formun $ _SERVER ["REQUEST_METHOD"] kullanılarak gönderilip gönderilmediğini kontrol ettik. REQUEST_METHOD POST ise, o zaman form gönderildi - ve onaylanmalıdır. Gönderilmediyse, doğrulamayı geç ve boş bir form göster.
Ancak, yukarıdaki örnekte, tüm giriş alanları isteğe bağlıdır. Kullanıcı herhangi bir veri girmese bile forum yinede iyi çalışır
 

Users who are viewing this thread

Top