Filter_xss () ve check_plain () nasıl ve ne zaman kullanılır?


11

views-view-fields--magazine--magazine.tpl.phpWeb sitemde bunun gibi çok sayıda şablon dosyası var . güvenliği artırmak için filter_xss () ve check_plain () yöntemini nasıl ve ne zaman kullanmalıyım? örneğin bu kod:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

Bu işlevleri içine nasıl uygulayabilirim?


Kullanım filter_xss()potansiyel tehlikeli içerik (güvenilmeyen kullanıcıdan yani içerik) den filtre XSS istiyorum, ve ne zaman check_plain()bir dize HTML özel karakterler kaçmak istediğinizde
Clive

Yanıtlar:


13

İlk olarak, Drupal API'sında bunları okuyun:

Dolayısıyla check_plain(), HTML'de ( <ve gibi &) özel bir anlamı olan özel karakterleri , daha sonra bir sayfanın parçası olarak görüntülenen bu dizgi kelimesi kelimesine (HTML olarak yorumlanmaz) oluşturulmasını sağlayacak düz metin varlıklarına ( sırasıyla &lt;ve &amp;sırasıyla) kodlar . HTML işaretleme. İşlev, filter_xss()siteler arası komut dosyası oluşturma (XSS) güvenlik açıklarını önlemek için bir HTML dizesini filtreler. Dört şey yapar:

  • Tarayıcıları kandırabilecek karakterleri ve yapıları kaldırma
  • Tüm HTML öğelerinin iyi biçimlendirildiğinden emin olma
  • Tüm HTML etiketlerinin ve özelliklerinin iyi biçimlendirildiğinden emin olma
  • Hiçbir HTML etiketinin izin verilmeyen bir protokole sahip URL'ler içermediğinden emin olun (örn.

Her iki işlev de, veriler sitenizde oluşturulmadan önce kullanıcı enjeksiyonunun etkisiz hale getirildiğinden emin olmak için kullanıcılardan gelen verileri sterilize etmek için kullanılır .

Sen asla geçemez aynı dizeyi aracılığıyla hem .

Eğer kullanırsanız check_plain()o zaman işleve iletilen dize olarak kullanılacak gerekiyordu düz metin (değil HTML). O zaman filter_xss()gerekli değildir, çünkü check_plain()her zaman dize düz metin yapar.

Eğer kullanırsanız filter_xss(), o zaman işleve iletilen dize HTML olması gerekiyordu, ve check_plain()irade karışıklık o kadar.

Örnek olarak kullandığınız şablona baktığımda, bana iletilen üç alanın tümü print()zaten sterilize edilmiş ve daha fazla sanitasyona ihtiyaç duymayan içerikten geliyormuş gibi görünüyor .

Ancak, kullanıcı filtresini "Filtrelenmiş HTML" veya "Düz" gibi "güvenli" bir metin filtresinden geçirmeden toplayan kendi modülünüzü oluşturursanız, bu işlevleri sıhhi tesisat amaçları için kullanmanız gerekir.


Kullanıcılardan gelen girdileri nereden kontrol edebilirim? örneğin bir içerik türü vardır ve anonim kullanıcıların bu tür düğümler oluşturmalarına izin verilir.
M ama D

@Drupalist, Anonim kullanıcının "güvenli olmayan" bir metin biçimi kullanmasına asla izin vermemelisiniz. Yönetim »Yapılandırma» İçerik yazma »Metin Biçimleri bölümüne gidin . Drupal ile gelen "güvenli" metin biçimleri "Filtrelenmiş HTML" ve "Düz metin" tir. Bu ise sadece anonim kullanıcı için izin verilen formatlar, Drupal için sizin için gerekli kontrolleri gerçekleştiren herhangi yerleşik düğüm türüne ve çekirdek ile oluşturduğunuz herhangi düğüm tipi Alanları özelliği. Kullanım durumunuz bundan farklıysa, kullanım durumunu açıklayan yeni bir soru sorun.
Serbest Radikal

Anonim kullanıcıların sadece kullanmasına izin verilirplain text
M ama D

@Drupalist, sorun değil. Düz metni sterilize etmek için bu işlevleri kullanmaya gerek yoktur.
Serbest Radikal

3
@ARUN, hayır. Standart Drupal uygulaması, kullanıcının her zaman DB'ye yazdıklarını tam olarak kaydetmek ve oluşturmadan önce metni sterilize etmektir.
Ücretsiz Radikal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.