PHP Güvenlik İşlevi: strip_tags, filter_var, Md5 ve sha1

⚡ Akıllı Özet

PHP Güvenliği, verileri doğrulayarak, temizleyerek ve güvenli bir şekilde depolayarak web uygulamalarını saldırganlardan ve dikkatsiz girişlerden korur. Bu kılavuz, başlıca tehditleri ele aldıktan sonra strip_tags, filter_var ve esca fonksiyonlarının nasıl çalıştığını gösterir.pingAyrıca, XSS, SQL enjeksiyonu ve çalınmış kimlik bilgilerine karşı korunmak için password_hash ile modern parola karma algoritması kullanılmaktadır.

  • 🛡️ Tehditleri Tanıyın: Başlıca riskler SQL enjeksiyonu, siteler arası komut dosyası çalıştırma (XSS) ve genellikle formlar aracılığıyla gerçekleştirilen kod enjeksiyonudur. URL parametreleri.
  • 🧹 Şerit Etiketleri: strip_tags HTML'yi kaldırır, JavaGirişten alınan komut dosyası ve PHP etiketleri, depolanmış siteler arası komut dosyası çalıştırma riskini azaltır.
  • ✅ Girişi Doğrula: filter_var, verileri doğrular ve temizler; kodunuzun ona güvenebilmesi için değerin beklenen türde olduğunu teyit eder.
  • 🔒 Kaçış mı, Bağlanma mı? mysqli_real_escape_string sorgu girdisini kaçış karakterleriyle değiştirir, ancak parametreli hazırlanmış ifadeler SQL enjeksiyonuna karşı daha güçlü bir savunma sağlar.
  • 🔑 Şifreleri Doğru Şekilde Karıştırın: Parolaları asla MD5 veya SHA1 ile saklamayın; bunun yerine yavaş, tuzlanmış bcrypt karma algoritması kullanan password_hash ve password_verify fonksiyonlarını kullanın.
  • ???? Derinlemesine Savunma: Doğrulama ve esca işlemlerini birleştirin.pingTek bir kontrol mekanizmasına güvenmek yerine HTTPS ve en az ayrıcalıklı veritabanı hesaplarını kullanmak.
  • 🤖 Yapay Zeka Yardımı: Yapay zeka araçları, PHP kodunu güvenlik açıkları açısından denetleyebilir ve SQL enjeksiyonu veya XSS zafiyetlerini güvenli bir şekilde düzeltmeye yardımcı olabilir.

PHP Güvenliği

Potansiyel güvenlik tehditleri

Sisteminize saldırabilecek temelde iki grup insan vardır:

  • Bilgisayar korsanları – yetkisiz verilere erişim sağlamak veya uygulamayı bozmak amacıyla
  • Kullanıcılar, formlara yanlışlıkla hatalı parametreler girebilirler ve bu durum bir web sitesi veya web uygulaması üzerinde olumsuz etkilere yol açabilir.

Dikkat etmemiz gereken saldırı türleri şunlardır.

SQL Injection – Bu tür saldırılar zararlı kodları ekler. SQL ifadeleri.

Bu işlem, kullanıcı giriş formları kullanılarak veya URLDeğişken kullanan s'ler.

Eklenen kod, bir SQL sorgusunun WHERE yan tümcesindeki koşulu yorum satırı haline getirir. Eklenen kod ayrıca şunları da yapabilir:

  • her zaman doğru olacak bir koşul girin
  • bir tablodan veri silmek
  • tablodaki verileri güncelleme

Bu tür saldırılar genellikle bir uygulamaya yetkisiz erişim sağlamak için kullanılır.

Siteler arası komut dosyası oluşturma (XSS) – Bu tür saldırılar genellikle zararlı kod ekler. JavaKomut dosyası. Bu, iletişim formu ve yorum formu gibi kullanıcı giriş formları kullanılarak yapılır. Bunun amacı şunlardır:

  • gibi hassas bilgileri alın çerez verileri
  • Kullanıcıyı farklı bir sayfaya yönlendirin. URL.

Diğer tehditler arasında PHP kod enjeksiyonu, shell enjeksiyonu, e-posta enjeksiyonu ve komut dosyası kaynak kodunun ifşa edilmesi yer alabilir.

PHP Uygulama Güvenliği En İyi Uygulamaları

Şimdi de PHP geliştirirken dikkate almamız gereken bazı güvenlik en iyi uygulamalarına bakalım.ping Uygulamalarımız.

PHP şerit_etiketleri

strip_tags fonksiyonu HTML'i kaldırır, JavaSenaryoveya bir dizeden PHP etiketleri.

Bu işlev, uygulamamızı siteler arası komut dosyası çalıştırma (XSS) gibi saldırılara karşı korumamız gerektiğinde kullanışlıdır.

Kullanıcılardan yorum kabul eden bir uygulamayı ele alalım.

<?php
 
$user_input = "Your site rocks";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

comments.php dosyasını phptuts klasörüne kaydettiğinizi varsayarak, aşağıdaki konuma gidin: URL http://localhost/phptuts/comments.php

PHP şerit_etiketleri

Kullanıcıdan aşağıdaki girdiyi aldığınızı varsayalım: alert(‘Your site sucks!’);

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Şuraya göz atın: URL http://localhost/phptuts/comments.php

PHP şerit_etiketleri

Şimdi strip_tags fonksiyonunu kullanarak uygulamamızı bu tür saldırılardan koruyalım.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Şuraya göz atın: URL http://localhost/phptuts/comments.php

PHP şerit_etiketleri

PHP filtre_var işlevi

Filter_var işlevi verileri doğrulamak ve temizlemek için kullanılır.

Doğrulama, verilerin doğru türde olup olmadığını kontrol eder. Bir dizedeki sayısal doğrulama denetimi yanlış sonuç döndürür.

Temizleme, yasadışı karakterlerin bir siteden kaldırılmasıdır. dizi.

Ayrıntılı bilgi için bu bağlantıyı inceleyin: filtre_var

Aşağıdaki kod, yorum sistemi içindir. Etiketleri kaldırmak için filter_var fonksiyonunu ve FILTER_SANITIZE_STRIPPED sabitini kullanır.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

Çıktı:

alert('Your site sucks!');

Not: FILTER_SANITIZE_STRIPPED (FILTER_SANITIZE_STRING'in bir diğer adı) PHP 8.1'den itibaren kullanımdan kaldırılmıştır. Yeni kodlar için strip_tags() veya güvenli görüntüleme için htmlspecialchars() kullanın.

PHP mysqli_real_escape_string

`mysqli_real_escape_string` fonksiyonu, bir uygulamayı SQL enjeksiyonuna karşı korumaya yardımcı olmak için kullanılır.

Kullanıcı kimliği ve şifresini doğrulamak için aşağıdaki SQL sorgusuna sahip olduğumuzu varsayalım.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Kötü niyetli bir kullanıcı giriş yapabilir. ' VEYA 1 = 1 — Kullanıcı kimliği metin kutusuna `user_id` ve parola metin kutusuna 1234 yazalım. Şimdi kimlik doğrulama modülünü kodlayalım.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

Nihai sonuç şu olacaktır:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

İŞTE,

  • “WHERE uid = ”” ifadesi, boş bir kullanıcı kimliğini kontrol eder.
  • “' VEYA 1 = 1” her zaman doğru olacak bir koşuldur.
  • "-" işareti, parolayı test eden kısmı yorum satırı haline getirir.

Yukarıdaki sorgu tüm kullanıcıları döndürecektir. Şimdi giriş modülümüzü güvenli hale getirmek için mysqli_real_escape_string fonksiyonunu kullanalım. Gerçek kodda bu fonksiyonun ilk argüman olarak veritabanı bağlantısını aldığını unutmayın.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

Yukarıdaki kod şu çıktıyı verecektir:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Not: İkinci tek tırnak işareti kaçış karakteriyle belirtilmiştir, bu nedenle kullanıcı kimliğinin bir parçası olarak kabul edilecek ve parola yorum satırı haline getirilmeyecektir.

En iyi pratik: escaping Yardımcı olur, ancak mysqli veya PDO'daki parametreli hazırlanmış sorgular, SQL enjeksiyonuna karşı önerilen savunma yöntemidir, çünkü veriler asla sorgu metnine karıştırılmaz.

PHP Md5 ve PHP sha1

MD5, Message Digest 5'in kısaltmasıdır ve SHA1, Secure Hash Algorithm 1'in kısaltmasıdır. Her ikisi de tek yönlü karma fonksiyonlarıdır.

Aşağıdaki kod, MD5 ve SHA1 algoritmalarının uygulanmasını göstermektedir.

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

phptuts klasörüne hashes.php dosyasını kaydettiğinizi varsayarak, aşağıdaki konuma gidin: URL.

PHP Md5 ve PHP sha1

Önemli: MD5 ve SHA1 hızlı, tuzsuz özetleme algoritmalarıdır ve Artık şifre saklamak için güvenli bir yer olarak kabul edilmiyor.Çünkü modern donanımlar ve gökkuşağı tablolarıyla hızla kırılabilirler. Bunları yalnızca güvenlik dışı sağlama toplamları için kullanın ve parolalar için aşağıdaki yöntemi kullanın.

PHP'de Parolaları Güvenli Bir Şekilde Karma Hash'leme Nasıl Yapılır?

PHP, parola saklama için `password_hash` ve `password_verify` fonksiyonlarını sunar. Bunlar, yavaş ve tuzlanmış bir algoritma (varsayılan olarak `bcrypt`) kullanır; bu nedenle her bir hash benzersizdir ve veritabanınız çalınsa bile kırılması zordur.

<?php
// Hash a password before storing it in the database
$hash = password_hash("mypassword", PASSWORD_DEFAULT);
 
// Verify the password when the user logs in
if (password_verify("mypassword", $hash)) {
    echo "Password is valid";
} else {
    echo "Invalid password";
}
?>
  • şifre_hash() Veritabanına kaydedilecek tuzlanmış bir karma değer oluşturur; PASSWORD_DEFAULT ise sizi mevcut önerilen algoritmada tutar.
  • şifre_doğrula() Giriş denemesini, şifresini çözmeden, saklanan karma değerle karşılaştırır.

Tuz ve algoritma hash'in içinde saklandığı için bunları kendiniz yönetmenize gerek kalmaz; bu da PHP'de parolaları yönetmenin doğru ve geleceğe dönük yolu olmasını sağlar.

SSS

mysqli veya PDO'da bağlı parametrelerle hazırlanmış ifadeler kullanın. Bunlar sorguyu ve veriyi ayrı ayrı gönderir, böylece kullanıcı girişi sorgu yapısını asla değiştiremez. Bu, manuel olarak hata ayıklamaktan daha güçlüdür.ping giriş.

`strip_tags` HTML ve PHP etiketlerini tamamen kaldırırken, `htmlspecialchars` bunları güvenli varlıklara dönüştürerek metin olarak görüntülenmelerini sağlar. Çıktı için `esca` kullanılır.ping XSS saldırılarına karşı, `htmlspecialchars` genellikle daha güvenli bir seçenektir.

Her oturum için benzersiz bir CSRF belirteci oluşturun, bunu her forma gizli bir alan olarak yerleştirin ve gönderim sırasında doğrulayın. Belirteci eksik olan veya saklanan değerle eşleşmeyen tüm istekleri reddedin.

Evet. Yapay zeka, SQL enjeksiyonu, XSS, güvensiz parola karma algoritması ve güvenli olmayan dosya işleme gibi riskleri tarayabilir, ardından her bir riski açıklayabilir ve bir çözüm önerebilir. Bunu, güvenlik incelemesinin yerine geçecek bir şey olarak değil, faydalı bir ilk adım olarak değerlendirin.

Evet. Güvenlik açığı olan kodu yapıştırın, yapay zeka onu önceden hazırlanmış ifadelerle yeniden yazabilir ve hata mesajı verebilir.pingve girdi doğrulaması. Düzeltilmiş kodu test edin ve düzeltmenin orijinal saldırı girdisine karşı doğruluğunu teyit edin.

Bu yazıyı şu şekilde özetleyin: