PHP: görüntülenen bilgiler için en iyi güvenlik uygulamaları?

4 Cevap php

PHP, ben kullanıyorum parameterized queries SQL enjeksiyonu önlemek için en iyi yol olduğunu biliyoruz.

Ama ne gibi diğer amaçlar için kullanılacak kullanıcı girişi sanitasyon hakkında:

  • Bir kullanıcıya geri Görünen (olası çapraz site betik vektör)
  • Bir e-posta adresleme veya ileti gövdesinde doldurarak

Is htmlentities(), veritabanı olmayan kullanım için sterilize etmek için en iyi yolu nedir? Burada en iyi uygulama olarak kabul edilir?

4 Cevap

Php iyi xss filtre:

htmlspecialchars($_POST['param'],ENT_QUOTES);

Eğer some XSS istismar>

print('<A HREF="http://www.xssed.com/'.htmlspecialchars($_REQUEST[xss]).'">link</a>');

You don't need <> to execute javascript in this case because you can use onmouseover, here is an example attack:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"';

ENT_QUOTES çift tırnak önemser.

E-posta javascript shouldn't posta istemcisi tarafından yürütülür, ve eğer sonra sitenizin nedeniyle aynı Kökeni Politikasına etkilenmez, biraz farklı. Ama yine de kullanmak güvenli tarafta olmak için htmlspecialchars($var,ENT_QUOTES);. ANCAK, PHP'nin mail () fonksiyonu açığına farklı bir tür, onun adı CRLF enjeksiyon yenik düşer. İşte PHP-Nuke karşı örnek bir güvenlik açığıdır. Eğer böyle bir işlev çağrısı varsa: mail($fmail, $subject, $message, $header); Sonra bir kullanıcı $ başlığına \r\n enjekte edemez emin olmalısınız.

Hassas kodu:

$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";

yamalı:

$_GET[name]=str_replace(array("\r","\n"),$_GET[name]);
$header="From: \"$_GET[name]\" <$ymail>\nX-Mailer: PHP";

Ayrıca herhangi bir tehlikeli HTML şerit ve güvenli girişi bırakacak HTML Arıtma ödeme isteyebilirsiniz. Ayrıca HTML / yasaklılar izin ne kendi kurallarını oluşturabilir.

http://htmlpurifier.org/

Eğer bunun dışında bir XSS oluşamaz çok iyi, ilk, belirli alanlar için kural oluşturabilirsiniz e-posta gibi oluşmalıdır tek şey harfler, sayılar, @ (at-sembolü? Gerçekten ne denir) ve bir dönem bu yüzden htmlentities() veya htmlspeicalchars() kullanarak kaynaklarını israf gerek.

Hayır,

1) deyimleri SQL enjeksiyonu için bir çözüm değildir hazırlanmıştır. Çoğu durumda tablolarını SQL enjeksiyonu önlemek için etkili bir yoldur, değişken bağlama ve dolayısıyla şeffaf kaçışa ima eder.

2) Eğer girdiyi ETMEYİN - Eğer sterilize output. Tüm yollarla (örneğin emin başlangıç ​​tarihi, bitiş tarihinden önce gelen olun) girişini doğrulamak, ancak veri repsentation sadece PHP kodu bırakır noktada değiştirilmelidir. Doğrudan HTML içine yazılır veri temizleme için yöntem bir URL'ye yazılı verileri bir javascript string değişken bir SQL deyimi olan sokulmak için veri sterilize nasıl farklı içine yazmak veri dezenfekte nasıl farklı olduğunu sterilize nasıl farklı Eğer modem göndermeden önce verileri sterilize nasıl farklı ...

... Ne yapacaksın? verilerin her türlü gösterimini oluşturmak? Verilerin evrensel iyi temsil oluşturmak?

http://xkcd.com/327/

C.