Bu kod satırının noktası nedir?

9 Cevap php

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\";");

9 Cevap

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.

Ben bir dize ve bir numara olmak $ text_including_tax zorlayarak bir korkak bir yol olduğunu tahmin ediyorum.

Belki bir dize olarak değişkeni artığını bir girişimde bulunuyor? Sadece bir tahmin.

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);

PHP kodu olarak dize değerlendirmek.

Ama kendisi bir değişken eşittir yapmak gibi görünüyor? Tuhaf.

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.

Ben önce bu kod temeli baktım. Bu gördüğüm en kötü PHP bazı bulunuyor.

Ben size başka bir yerde yapılan hataları örtbas etmek için bu tür şeyler yapardım düşünün.

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"];
	}