v2.5.2
Giriş yap

Ckeditör vb. Editörlerde istenmeyen kod girdisini önlemek;

Anonim
639 defa görüntülendi ve 2 kişi tarafından değerlendirildi

Merhaba,

Proje de kullanıcılara içerik girdiriyorum. Fakat ckeditör gibi bir editör tercih ettiğim'den dolayı kod girdisi yapabiliyorlar.

Örneğin;

bir <a href="#">link</a> etiketi olsun. Kod kısmına gelerek ek şeyler ekleyebiliyorlar.

  • onclick=""
  • onmouseout=""
  • onmouseover=""

vb. gibi değerleri kod içine yazıp yönlendirme veya bir script kodu çalıştırabiliyorlar.

Sadece tek sorun bu olsa gene tüm onclick, onmouseut gibi değerleri sildirebilirim ama sadece bu değil <script></script>, <meta>, <link> vb. gibi kodları'da yazabiliyorlar.

Bunu önleyecek sadece izin verdiğim kodları yazabilecekleri bir filtre veya fonksiyon bulunuyor mu?

Cevap yaz
Cevaplar (1)
arcface
1624 gün önce

merhaba

Altta verdiğim fonksiyonu kullanarak bu tür dışardan girilen kodları önleyebilirsin daha önce bu konudan dolayı müzdarip olduğum için zamanında böyle bir fonksiyon hazırlamıştım.

form üzerinden gelen içerik yazısını bu bug_crusher fonksiyonundan geçirir isen benim standart olarak izin verdiğim zararsız bir kaç html koda izin verir ve onclick gibi kodları da her bir yazıyı filtreden geçirerek temizlemiş olursun.

Fonksiyonu kullanırken benim standart olarak ayarladığım kelimeler yetersiz gelir ise 2 inci bir argüman olarak istediğin filtreleri girerek sadece o kodlara izin verebilirsin.

	function bug_crusher($text,$filter = null){
	  if (!$filter) {
	    $filter = '<p><a><span><strong><u><img><div><code><b><i><h1><h2><h3><h4><h5><h6><h7><em><s><blockquote><iframe><embed></embed><pre></pre><address><kbd><small><ul><li><ol><sub><sup><table><tr><td><th><tbody><thead>';
	  }
	  $text = strip_tags(htmlspecialchars_decode(stripcslashes($text)), $filter);
	  $text = preg_replace('/([onON]+)([a-zA-Z]+)(\s+|)=(\s+|)(["\']+)(.*?)(["\']+)/','', $text);
	  return htmlspecialchars(trim($text));
	}

Örnek bir kullanım;

<?php


    $icerik = '
        <a href="#" onclick="alert(\'Tıkladın\');">Tıkla Bakalım</a>
        <script>alert("2 inci kod girdisi");</script>
        <p>Masum bir paragraf</p>
    ';
    
    
	function bug_crusher($text,$filter = null){
	  if (!$filter) {
	    $filter = '<p><a><span><strong><u><img><div><code><b><i><h1><h2><h3><h4><h5><h6><h7><em><s><blockquote><iframe><embed></embed><pre></pre><address><kbd><small><ul><li><ol><sub><sup><table><tr><td><th><tbody><thead>';
	  }
	  $text = strip_tags(htmlspecialchars_decode(stripcslashes($text)), $filter);
	  $text = preg_replace('/([onON]+)([a-zA-Z]+)(\s+|)=(\s+|)(["\']+)(.*?)(["\']+)/','', $text);
	  return htmlspecialchars(trim($text));
	}
	
	// Standart Kullanım
    
    echo bug_crusher($icerik);
    
    # Çıktı
    # <a href="#" >Tıkla Bakalım</a>
    #<p>Masum bir paragraf</p>
    
    // Özelleştirilmiş Kullanım - Script koduna izin verme
    
    echo bug_crusher($icerik,'<p><script><a>');
    
    # Çıktı
    # <a href="#" >Tıkla Bakalım</a>
    #<script>alert("2 inci kod girdisi");</script>
    #<p>Masum bir paragraf</p>
    
?>

Kullanımı gayet basit ve açık onclick değeri isterse OnCliCk gibi yazsın fark etmez filtre yakalayıp silecektir.