PHP - HTML Arıtma - merhaba w rld / dünya öğretici striptags

9 Cevap php

Ben sadece kullanıcı inputed dizesi (yani bir kişinin adını temsil eder) dezenfekte olduğundan emin olmak için HTML Arıtma kullanarak içine arıyorum.

Ben sadece sayısal alfa ve normal noktalama karakterleri istiyorum - Ben herhangi bir html etiketleri, script, biçimlendirme vb izin vermek istemiyorum.

HTML Arıtma için mevcut seçeneklerin çokluğu zor ve kadarıyla ben gördüğünüz gibi, docs bir uzaklaştırmak / orta veya sonu var görünmüyor

bkz: http://htmlpurifier.org/docs

Is there a simple hello world tutorial online for HTML Purifier that shows how to sanitize a string removing all the bad stuff out of it.

Ben de sadece şerit etiketlerini kullanarak düşünüyor yaşıyorum:

veya PHP yerleşik veri hijyenikleştirmeye içinde

9 Cevap

Ben bir zengin metin editörü çıkışını hijyen için HTMLPurifier kullanarak ve ile sona erdi oldum:

include_once('htmlpurifier/library/HTMLPurifier.auto.php');

$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', 'UTF-8');
$config->set('HTML', 'Doctype', 'HTML 4.01 Transitional');

if (defined('PURIFIER_CACHE')) {
    $config->set('Cache', 'SerializerPath', PURIFIER_CACHE);
} else {
    # Disable the cache entirely
    $config->set('Cache', 'DefinitionImpl', null);
}

# Help out the Purifier a bit, until it develops this functionality
while (($cleaner = preg_replace('!<(em|strong)>(\s*)</\1>!', '$2', $input)) != $input) {
    $input = $cleaner;
}

$filter = new HTMLPurifier($config);
$output = $filter->purify($input);

Ilgi ana noktaları:

  1. Autoloader içerir.
  2. HTMLPurifier_Config gibi bir örneğini oluşturun $config.
  3. Gerektiği gibi $config->set() ile, yapılandırma ayarlarını ayarlayın.
  4. Buna $config geçen, HTMLPurifier bir örneğini oluşturun.
  5. Lütfen girişine $filter->purify() kullanın.

Ancak, çıkış herhangi bir HTML izin gerekmez şey için tamamen overkill.

Sen içeriğine dayalı giriş doğrulaması yapmalıdır - örnek değil isim için bazı regexpi kullanmak için

'/([A-Z][a-z]+[ ]?)+/' //ascii only, but not problematic to extend

Bu doğrulama iyi iş yapmak gerekir. Sayfa üzerine baskı yaparken ve daha sonra tercih edilen htmlspecialchars ile, çıkış kaçış.

Sen Karakterleri yorumlayarak tarayıcı olmadan yazdığınız kullanıcı korumak için () htmlspecialchars'dan gibi Someting kullanabilirsiniz.

Ben her zaman CodeIgniter'ın xss temizleme sınıf oldukça iyi olduğunu düşündüm, ama daha geçenlerde Kohana döndü ettik.

Onların xss_clean yöntemi bir göz

http://github.com/kohana/core/blob/c443c44922ef13421f4a3af5b414e19091bbdce9/classes/kohana/security.php

Bence bir dize olmayan tüm alfanümerik karakterleri kaldırmak için en kolay yolu aşağıdaki gibi Regex.Replace () kullanmak için:

Regex.Replace (stringToCleanUp, "[\ W]", "");

While \w (lowercase) matches any ‘word’ character, equivalent to [a-zA-Z0-9_] \W matches any ‘non-word’ character, ie. anything NOT matched by \w. The code above will use \W (uppercase) and replace the findings with nothing.

Eğer, böyle [a-zA-Z0-9 ^] kullanabilirsiniz çizgi izin vermek istemiyorsanız bir alternatif olarak:

Regex.Replace (stringToCleanUp, "[^ a-zA-Z0-9]", "");

Eğer kod enjeksiyon saldırıları nedeniyle çalışıyorsanız, sadece veri scape ve depolamak ve girilen kullanıcı gibi yazdırın.

Örneğin: MySQL SQL Injection sorunları önlemek istiyorsanız, mysql_real_escape_string() işlevi veya SQL cümle sterilize benzer kullanın. *

Başka bir örnek: Bir HTML belgesine veri yazma, html_entities() ile verileri ayrıştırmak, böylece kullanıcı tarafından girmek gibi veriler görünür olacaktır.

Basitlik için, strip_tags() kullanın, ya da tekrarlarını değiştirmek <,>, ve ve ya &lt;, &gt; ile ve &amp;, sırasıyla. Bu kesinlikle en iyi çözüm değil, ama hızlı.

Bir hafta önce buldum ... onu seviyorum.

"A simple PHP HTML DOM parser written in PHP5+, supports invalid HTML, and provides a very easy way to handle HTML elements." http://simplehtmldom.sourceforge.net/

// Example
$html = str_get_html("<div>foo <b>bar</b></div>");
$e = $html->find("div", 0);

echo $e->tag; // Returns: " div"
echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>"
echo $e->innertext; // Returns: " foo <b>bar</b>"
echo $e->plaintext; // Returns: " foo bar"

Sen aracılığıyla da döngü can ve belgeler ve örnekler oldukça iyi, vb bireysel etiketlerini kaldırmak ... Ben kolay epeyce yerlerde kullanmak bulundu. :-)

Ben genellikle aşağıdaki ile benim veritabanına göndermeden önce tüm kullanıcı girişi temizlemek

mysql_reql_escape_string( htmlentities( strip_tags($str) ));