Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

mysql ve html tag'ları

Merhaba,

çalışmakta olduğum proje'de, site kullanıcılarına richtext editör kullanmalarına izin vermek istiyorum. Şu an çalışır durumdaki richtext editör veriyi mysql veri tabanına şu şekilde atıyor;

$postedValue = htmlspecialchars($value);


htmlspecialchars komutu kodu şu şekle sokuyor;
"&lt;p&gt;Area&lt;/p&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;1&quot...."

Ben de şu şekilde bir çalışma yaparak etkileri izledim;

$text1 = preg_replace('#<br />\s*?<br />(?!\s*<br />)#i', "</p>\n<p>", $value);
$text2 = htmlentities($value, ENT_QUOTES, 'UTF-8');
$text3 = htmlspecialchars($value);
$text4 = stripslashes($value);
$text5 = get_magic_quotes_gpc($value);
$text6 = strip_tags($value);

fakat sormak istediğim soru şu;

Kullanıcı kendi sayfasına isterse youtube videosu, isterse urun hakkında 360 derecelik sunum veya bunlar gibi şeyler ekleyebilecek. Bunları yapabilecek kullanıcı kitlesi sınırlı ve güvenli. Esas merakım, ben html kodlarını mysql'e nasıl eklemeliyim? Direkt olarak görünen kod ne ise öyle mi eklemek, karakterleri güz yazıya mı çevireyim? ne yapayım da güvenli olsun veya hangi metod neden daha güvenli olur.

Teşekkürler
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • Kesali adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    208 cevap - 2 soru
    Eğer userların yazdığı kodları sayfada göstermeyecek isen htmlspecialchars biraz uygun olmamış sanırım.
    Bence;

    $postedValue = strip_tags($value, '<p><a>... kullanıcıların siteye zarar vermeyeceği taglar buraya');
    


    Bu şekilde kaydedersen hem güvenlik sorunu olmaz hemde gerekli tagları kullanmalarına izin verebilrisin.
    • katapult adlı üyenin fotoğrafı katapult
      Bu vermiş olduğunuz kod ile bazı sorunlar yaşamasın hocam.

      Uzak siteden video felan eklenebilir veya resim çekilebilir çünkü.
      11 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      $text1 = preg_replace('#<br />\s*?<br />(?!\s*<br />)#i', "</p>\n<p>", $value); 
      $text2 = htmlentities($value, ENT_QUOTES, 'UTF-8'); 
      $text3 = htmlspecialchars($value); 
      $text4 = stripslashes($value); 
      $text5 = get_magic_quotes_gpc($value); 
      $text6 = strip_tags($value);
      

      Peki tek tak avantajlarını anlatayım o zaman.
      $text1 = preg_replace('#<br />\s*?<br />(?!\s*<br />)#i', "</p>\n<p>", $value); 
      

      Pek bu işe uygun gözükmüyor çünkü performansı düşük olacaktır. Yazdığınız regular expression zararlı tagları bulup onları değiştirmeli orta veya üzeri derecede regular expression bilmeniz gerekli.

      $text2 = htmlentities($value, ENT_QUOTES, 'UTF-8');
      $text3 = htmlspecialchars($value);

      İkiside neredeyse aynı sonucu verecektir aralarında aralarında çok ufak bir fark var htmlspecialchar sadece html tagları "' html'e convert eder. htmlentities işe illegal karakterler yani ş ç ı gibi karakterleride convert eder.

      Tüm taglar convert edileceği için zaten herhangibir fonksiyonellik sağlanamaz.

      $text4 = stripslashes($value);
      Bu ise koddaki slash ları siler uzaktan yakında alakası yok.

      $text5 = get_magic_quotes_gpc($value);
      Böyle birt kullanım şekli olamaz zaten get_magic_quotes_gpc megic quotes açıkmı değilmi diye ini değerini döndürür.

      $text6 = strip_tags($value);

      strip_tags inputtan gelen tüm html taglarını siler. Gelen input sanki düz yazıymış gibi olur. Eğer tüm taglar değilde bazı zararsız tagları kullanmak istiyorsanız strip_tags($value,'<a><img><h1>'); gibi belirtebilirsiniz.

      Bence en mantıklı (eğer bilmediğim atladığım bir yöntem varsa lütfen belirtin) çözüm;


      
      $white_list='<a><img><h1><embed>...... sitene zarar vermeyen işlevsellik veren taglar';
      $text = strip_tags($value,$white_list);
      
      11 yıl önce yazılmış
    • besimler adlı üyenin fotoğrafı besimler
      Teşekkür ederim. Bu durumda güvenliği sağlayan sadece gelen veriyi yeterli kontrollerle veritabanına yazdırmak. Direk kodu yazdırmışım ya da tagları duz yazıya cevirmişim farketmez bu durumda. Açıkcası bu içeriği ekleyecek olan şahıslar güvenilir ve sınırlı sayıda. Video veya resim eklemelerine de izin vereceğim. Yani endişem içerigi ekleyecek olanda veya icerik degil, bu şekilde bir veri eklemenin güvenliğinin sağlanması konusundaki eksikliğimdir.
      11 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Eğer ekleyen kişiler güvenliyse gelen verileri mysql_real_escape_string ile veri tabanına yazdırırsan sorun olmaz.
      11 yıl önce yazılmış

Cevaplar

Hiç cevap bulunamadı.