Bu güvenlik fonksiyonları yeterli olacak mı?

4 Cevap php

Ben sql enjeksiyon veya xss savunmasız değilim bu yüzden benim sitenin güvenli çalışıyorum.

İşte benim kod:

//here's the form (abbreviated)
<form>
<label for="first_name" class="styled">First Name:</label>
<input type="text" id="first_name" name="first_name" value="<?php if (!empty($first_name)) echo $first_name; ?>" /><br />

//submit button etc
</form>


if (isset($_POST['submit'])) {

 //gets rid of extra whitesapce and escapes
 $first_name = mysqli_real_escape_string($dbc, trim($_POST['first_name']));

 //check if $first_name is a string
 if(!is_string($first_name)
 { 
 echo "not string"; 
 }

 //then insert into the database. 
 .......

}

mysqli_real_escape_string: Ben bu fonksiyon \ n \ r gibi bazı harfleri kaçar olduğunu biliyorum, bu yüzden veri DBC içine girilen aldığında, önümüzdeki tüm kaçtı harfleri '\' olurdu?

  • Bu komut en sql enjeksiyonu önlemek için yeterli olacak mı? sadece kaçan ve veri bir dize olup olmadığını kontrol. (Fiyatlar koyarak kullanıcıları gibi) tamsayılar değerleri için, ben sadece: is_numeric().

  • Nasıl kullanmalıyım htmlspecialchars? Kullanıcı verilerini yankılanan ve görüntüleme sadece bunu kullanmalı mıyım? Bir veritabanına veri eklerken ya da ben de bu kullanmalıyım?

  • Ne zaman strip_tags kullanmalı veya htmlspecialchars?

Tüm bu fonksiyonları ile So:

if (isset($_POST['submit'])) {

 //gets rid of extra whitesapce and escapes
 $first_name = mysqli_real_escape_string($dbc, trim($_POST['first_name']));

 //check if $first_name is a string
 if(!is_string($first_name)
 { 
 echo "not string"; 
 }

 //gets rid of any <,>,&
 htmlspecialchars($first_name);

 //strips any tags with the first name
 strip_tags($first_name)

 //then insert into the database. 
 .......

}

Hangi fonksiyonlar sql enjeksiyon için kullanmak gerektiğini ve hangilerinin ben XSS için kullanmak gerekir?

Bir kullanıcı bana karşı komut xss ekleyebilirsiniz? Ne zaman bir form var mı?

4 Cevap

SQL enjeksiyon için, mysql_real_escape_string çalışmalıdır. (Tamamen emin olmak için hazırlanmış ifadeleri kullanabilirsiniz)

XSS, htmlspecialchars çalışmalıdır. strip_tags Birisi akıllıca onların javascript disguse olabilir gibi, güvenli olmayabilir.

Veri bir dize olup olmadığını kontrol yararsız olduğunu: dizeleri enjeksiyonlar için kullanmak istiyorum tam olarak ne olduğunu.

kaçan rutinleri buggy olmak ve (aslında, daha önceden hata olmuştur) doğru şeyler kaçan değil riski var çünkü real_escape_string, SQL enjeksiyon kaçınarak makul, ama garanti değil yoldur. Bu enjeksiyon imkansız hale sorgunun yapısından verileri ayıran - bunu yapmak için doğru yolu parameterized queries kullanılan etmektir. Kesinlikle parametreli sorguları kullanabilirsiniz yapamıyorsanız, ancak, (bağlantı açılmış bir set_charset ile) real_escape_string yapabileceğiniz en iyisidir.

Siz kullanıcı dokunabilirsiniz şey htmlspecialchars kullanmak isteyeceksiniz ve bunu bir sayfada gösterilen anda kullanmak istiyorum. Kullanıcıların mesaj ya da bir şey biçimlendirmek istiyorsanız, o zaman bir biçimlendirme dili a la BBCode ile bunları sağlamak (ve BBCode after koşu htmlspecialchars'ın) dönüştürmek gerekir. Eğer saf HTML saklamak gerekiyorsa, htmlspecialchars kullanmak istemem, ama sadece güvenilir insanlar orada yazabilirsiniz lanet emin olmak isterdim. Eğer bir blog yazıyorsanız Örneğin, sadece blog editörler orada şeyler yazabilir, çünkü blog yazısı kendisi saf HTML izin için iyi olabilir. Herkes orada şeyler yazabilirim çünkü Ancak, bu yorumlarda izin istemem, ve bu sadece çok kolay cross-site scripting gibi şeyler yapmak istiyorum.

HTML kullanıcı tarafından sağlanan bilgiler katıştırma zaman, kullanmalısınız htmlspecialchars. Eğer SQL kullanıcı tarafından sağlanan bilgiler katıştırma zaman, kullanmalısınız mysql_real_escape_string. Bu kuralları uygulayın ve OK olmalıdır.

Veritabanı güvenliği için daha iyi bir çözüm parametrized / hazırlanmış sorguları bu sizin için kaçan idare edecek gibi olasılığını ortadan kaldırarak, ({[) (1]} here görmek ve) kullanmak için olacağını, ancak, unutmayın Lütfen unutma.

Ayrıca, magic quotes kontrol etmeyi unutmayın.

HTML baskı iseniz HTML Purifier ile ilk temizlemek gerekir. Gelişmiş (ve özelleştirilebilir) versiyonu olarak düşünün strip_tags().

Veritabanına yerleştirilmesi için, ben kullanmak prepared statements. Kusursuzdu.