Mysql enjeksiyon ve cross site scripting karşı savunmak için en iyi yolu

3 Cevap php

Şu anda, ben yukarıda belirtilen sorunları durdurma bir 'duvara her şeyi atmak ve sopalarla ne görmek' yöntemini uygulayın. Aşağıda birlikte cobbled fonksiyonudur:

function madSafety($string)
{

$string = mysql_real_escape_string($string);
$string = stripslashes($string);
$string = strip_tags($string);
return $string;

}

Ancak, bunu yapmak için daha iyi bir yolu olduğuna inanıyorum. Ben FILTER_ SANITIZE_STRING kullanıyorum ve bu tamamen güvenli için görünmüyor.

Ben siz istihdam ve nasıl başarılı yapmak hangi yöntemleri, soruyorum sanırım? Teşekkürler

3 Cevap

Sadece gerçekten anlamıyorum bir sürü şey yapıyor, size yardım edecek değildir. Eğer ne yapmalıyım nasıl ve nerede tam olarak enjeksiyon saldırıları ne olduğunu anlamak gerekir ve.

Bullet noktaları:

  • Disable magic quotes. Onlar yetersiz bir çözüm vardır ve bunlar konularda karıştırmayın.
  • SQL dizeleri doğrudan embed asla. Bağlı parametreleri kullanmak, ya da kaçmak kullanarak (mysql_real_escape_string).
  • Don't unescape (örn. stripslashes) Eğer veritabanından veri almak zaman.
  • (Eğer echo zaman Örn.), sen dize kaçmak varsayılan gerektiğini html dizeleri gömdüğünüzde (kullanma htmlspecialchars).
  • Eğer html html-dizeleri gömmek gerekiyorsa, dize kaynağı göz önüne almalısınız. Güvenilmeyen Eğer, bir filtre aracılığıyla boru bunu gerekir. strip_tags kullanmak gerektiğini teoride, ama kusurlu olduğunu; HtmlPurifier yerine kullanın.

Ayrıca bakınız: http://stackoverflow.com/questions/129677/whats-the-best-method-for-sanitizing-user-input-with-php

Don’t! mysql_real_escape_string after SQL enjeksiyon karşı savunmasız hale getirir SQL enjeksiyonu ve stropslashes Ne yapıyorsun karşı sizi korumak için yeterli olduğunu kullanma. Eğer gerçekten bunu istiyorsanız, before olarak koydu:

function madSafety($string)
{
    $string = stripslashes($string);
    $string = strip_tags($string);
    $string = mysql_real_escape_string($string);
    return $string;
}

stripslashes Ne yapıyorsun gerçekten yararlı değil mysql_real_escape_string.

strip_tags HTML / XML enjeksiyonu değil, SQL karşı korur.

Unutulmaması gereken önemli şey, differently bunun için var imediate kullanımına bağlı olarak dizeleri kaçmak gerektiğidir.

Ne yapıyorsun MYSQL isteklerinin kullanabileceği mysql_real_escape_string. Eğer çıktılamak zaman web sayfaları kullanabilirsiniz htmlentities. Web bağlantıları oluşturmak için kullanın urlencode ...

Vartec belirtildiği gibi, tüm yollarla tutucuları kullanabilirsiniz eğer bunu.

Bu konu çok yanlış!

Siz kullanıcı girişini süzmek gerekir değil! Bu onun tarafından girildikten bilgidir. '"'>s3cr3t<script>alert()</script>: Şifremi gibi olmak istiyorsanız ne yapacaksınız

Karakterleri Filtre ve bana değiştirilmiş şifrenizi bırakın, ben bile benim ilk giriş başarılı olamaz? Bu kötü.

Uygun çözüm hazırlanmış ifadeler kullanmak veya mysql_real_escape_string() sql enjeksiyonu önlemek ve html kodunu berbat önlemek için bağlam-farkında karakterlerin kaçan kullanmaktır.

Bana web tek Eğer kullanıcı tarafından girilen bilgiler gösterebilir yollardan olduğunu hatırlatmak istiyorum. Bazı masaüstü yazılım bunu yaparsanız böyle sıyrılmsına kabul ediyorsunuz? Ben cevap hayır umut ve bu doğru bir yol değildir neden anlamak.

Farklı içerik farklı karakterler kaçtı gerektiğini unutmayın. Eğer bir ipucu olarak kullanıcı ilk isim görüntülemeniz gerekiyorsa, örneğin, gibi bir şey kullanacak:

<span title="{$user->firstName}">{$user->firstName}</span>

Kullanıcı gibi olmak için onun ilk ismini belirledi Ancak, '"><script>window.document.location.href="http://google.com"</script> Sen ne yapacaksın? Tırnak şerit? Bu çok yanlış olur! Bunun yerine bu non-sense yapma, oluşturma sırasında tırnak kaçan düşünün!

Değerini kendisi render yaparken göz önünde bulundurmanız gereken bir diğer içeriğidir. Önce kullanılan html kodu ve görüntüyü kullanıcı ilk isim <textarea> gibi düşünün. Bu nedenle tüm sayfayı kesiliyor, bu textarea elemanı içine aşağıdaki tüm html kodunu örtecek.

Yine - bunu kullanırken içeriğe bağlı olarak verileri kaçan düşünün!