PHP: HTML ve PHP kodu ile eval fonksiyonunu kullanarak

3 Cevap php

Şu anda aşağıdaki kod, bir veritabanı tablosundan gelen adres:

<h1 class="widgetHeader">My Friends</h1>
<div class="widgetRepeater">            
    <p class="widgetHeader">Random Selection</p>
<?php 
    $friends = $user->getFriends(); 
?>
    <p class="widgetContent">
<?php 
        for ($i=0; $i<count($friends);$i++) { 
            $friend = $friends[$i]; 
?>
                <span class="friendImage" style="text-align:center;">
                    <?php print $friend->username; ?>
                </span> 
<?php 
        }
?>      
    </p>

</div>

Şimdi, ive php eval işlevini kullanarak denedim ama beklenmedik bir ayrıştırma hatası alıyorum '<'. Ben de çok başarı olmadan çıktı tamponu yöntemi ob_start () kullanarak denedim. Herhangi bir i bana bir hata vermeden değerlendirmek için bu kodu almak nasıl olarak fikir?

Not: veritabanı kodu $row['code'] adlı bir değişkende saklanır.

3 Cevap

eval = evil!

Eval'd kodu db geliyor ... özellikle bir mysql enjeksiyon = tam php yürütme = tam kontrol.

Aksine bazı tutucuları kullanın ve (herhangi bir diğer iyi çiftleşmiş sistem yok gibi) değiştirin.

Eğer veritabanında bu saklamak olabilir:

<h1 class="widgetHeader">My Friends</h1>
<div class="widgetRepeater">            
    <p class="widgetHeader">Random Selection</p>
    {%friendstemplate%}
</div>

Sonra onlar olmalıdır içeriği ile tutucuları str_replace. Sizin örnekte ben de bu arkadaşa başına bir subtemplate eklemek istiyorum:

<span class="friendImage" style="text-align:center;">
    {%username%}
</span>

... Hangi döngü olabilir ve {% friendstemplate%} yerleştirin.

PHP eval fonksiyonu parametre, HTML değil olduğu gibi PHP kodu çalıştırmak için bekliyor. PHP yakın ve açık etiketleri ile DB değerleri kuşatan deneyin:

eval('?>' . $row['code'] . '<?php');

Sen eval işaretleme kodu kullanamazsınız. Bunu dahil böylece geçici bir dosyaya kodu kaydetmek, ya da imleme değil böylece kodu yeniden, gibi bir şey ya:

print "<h1 class=\"widgetHeader\">My Friends</h1>";
print "<div class=\"widgetRepeater\">";
print "<p class=\"widgetHeader\">Random Selection</p>";
$friends = $user->getFriends(); 
print "<p class=\"widgetContent\">";
for ($i=0; $i<count($friends);$i++) { 
   $friend = $friends[$i];
   print "<span class=\"friendImage\" style=\"text-align:center;\">";
   print $friend->username;
   print "</span>";
}
print "</p>";
print "</div>";