Ben hattı 2136 tarihinde Joomla VirtueMart eklentisi bu kod satırı bulundu yönetici / bileşenler / com_virtuemart / sınıfları / ps_product.php içinde
eval ("\$text_including_tax = \"$text_including_tax\";");
Benim önceki cevabı hurda.
Bu eval () burada sebebi php eval docs gösterilir
Bu ne oluyor:
$text_including_tax = '$tax <a href="...">...</a>';
...
$tax = 10;
...
eval ("\$text_including_tax = \"$text_including_tax\";");
Bu sonunda $text_including_tax
eşittir:
"10 <a href="...">...</a>"
Tek tırnak önler $tax
dize orijinal tanımına dahil ediliyor. Ile eval()
yeniden değerlendirmek dize onu zorlar ve dize $tax
için değerini içerir.
Ben bu özel yöntemin bir hayranı değilim, ama bu doğru değildir. Bir alternatif kullanmak olabilir sprintf()
Bu kod $text_including_tax
bir dize olması zorlama kötü bir yol olarak görünüyor.
if $text_including_tax
onları keyfi kod çalıştırmasına için mümkün olan bir kullanıcı tarafından girilen verileri içerebilir çünkü kötü nedenidir.
Örneğin eğer $text_include_tax
eşit kuruldu:
"\"; readfile('/etc/passwd'); $_dummy = \"";
Eval olacak:
eval("$text_include_tax = \"\"; readfile('/etc/passwd'); $_dummy =\"\";");
Kötü niyetli bir kullanıcı passwd dosyasının bir dökümü verilmesi.
Bunu yapmak için daha doğru bir yöntem dize değişkeni döküm olacaktır:
$text_include_tax = (string) $text_include_tax;
hatta sadece:
$text_include_tax = "$text_include_tax";
Veri $text_include_tax
sadece bir iç değişken olan ya da zaten doğrulanmış içerik varsa bir güvenlik riski yoktur. Ama yine de bunu yapmak için daha açık ve daha güvenli bir yolu vardır, çünkü bir dize değişkeni dönüştürmek için kötü bir yoldur.
Sen çıkış içine vergi oranını elde etmek için eval gerekir. Sadece yeni bir sunucuya bu taşındı ve nedense bu hat bir sunucu hatası neden oldu. Hızlı bir düzeltme olarak, ben bunu değiştirdim:
//eval ("\$text_including_tax = \"$text_including_tax\";");
$text_including_tax = str_replace('$tax', $tax, $text_including_tax);
Diğerleri işaret gibi, yaptıklarını yeryüzünde ne olduğunu bilmez birisi tarafından yazılmış bir kod.
Ben de HTML / URI'larını / etc koyarak kaçan bir metin toplam eksikliği bulmak için kod hızlı bir göz vardı. birlikte. Eğer düzgün denetlemek için rahatsız olabilir eval konulara ek olarak burada bulunan birçok enjeksiyon delikleri, muhtemelen vardır.
Ben bu kod benim sunucuda çalışan istemem.
Hayır, bu yapıyor:
$text_including_tax
= "düz" deyin. Bu kod satırı değerlendirir:
$ Düz = "düz";
Mutlaka iyi değil, ama bu kez böyle bir dizideki tüm MySQL değişkenleri emmek için böyle bir teknik kullandı:
while ($row = mysql_fetch_assoc($result)) {
$var = $row["Variable_name"];
$$var = $row["Value"];
}