Ckeditör vb. Editörlerde istenmeyen kod girdisini önlemek;
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?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
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.