Hiçbir alternatifi var çünkü Hangi durumlar) eval (kullanımını talep?

5 Cevap php

I eval hız ve güvenlik nedeniyle JavaScript kaçınılmalıdır biliyorum. Ama PHP durumunda, nadiren bahsedilen güvenlik. Daha sık, çünkü eval gelişigüzel kullanılması gerekenden daha yavaş çalışan bir programdır.

Belirli hangi durumlarda başka hiçbir yolu çevresinde var eval, çünkü kullanmak gerekir?

Netlik için:

Biz kullanıcı tarafından sağlanan verileri bahsetmiyoruz. Yani soru eval saf ve tam kontrollü sunucu tarafı geçerli kullanımına odaklanmıştır.

5 Cevap

eval PHP eval ile kod-uating güvenlik sorunları Javascript gibi aynı: bazı kod değerlendirmek eğer, içerdiği ne nereden geldiğini emin olmak için var ettik.

PHP veritabanına erişimi olduğu gibi güvenlik etkileri bile büyük olabilir (amongst other things) - bozuk / çalmak için kullanılabilir anlamına gelir neredeyse Avery uygulama dayanır bilgiler!

O Javascript doğru olduğunu PHP muhtemelen doğru; Javascript, onlar "eval is evil "söylüyorlar.


Now, about specific situations in which you cannot avoid using eval... Well, in something like 4 years of developping in PHP as my every-day job, I don't remember having ever used eval in my own code ^^

Yine de, ve sen örneğin, veritabanında bazı kod depolama ve dosyalarda bunu önbelleğe değil (which could be included) zaman eval olurdu gerekir durumun örneği - Bazı CMS ile olur PHP kod bölümleri, örneğin, yönetim bölümünde yazdığınız için izin.

Eval ve create_function may keyfi kod enjeksiyonu sağlar. Uygulamanızın güvenliğini tehlikeye kullanılan PHP şeylerin bir yeri vardır.

Biz bıçak ve maçları oynamak için değil çocukları anlatmak - ama doğru kullanıldığında bu yararlı (yoksa gerekli) araçlardır. Yani PHP'nin işlevselliği bir sürü ile. Işlevselliğini as long as you understand exactly what you are doing kullanarak özünde yanlış bir şey yok.

Ama böyle soyut bir düzeyde programlama dillerinin bir tartışma StackOverflow hakkında ne değildir.

C.

i know eval should be avoided in javascript for speed and security reasons. but in the case of php, rarely is security ever mentioned. more often it's your program running slower than it should because of haphazard use of eval.

eval çok php evil .

in what specific situations should you use eval() because there is no other way around it?

Her şeyden önce, biz bazı kod yürütme için bu kullanmak zorunda yoksa avoid mümkün olduğunca çok, ama, o zaman o ile gitmek zorunda kalacak deneyin ama kötü olduğunu söyledi olarak, kullanmak Sizin de own risk.

Bottom Line:

Never allow at any rate, the user input to be run with eval. (Sen Risking / ne yaptığını biliyor sürece)

i tamamen kötülüktür eval noktasında önceki cevapları ile katılıyorum ve benim kodu kullanmak asla.

ama bir durumda ben eval önlemek için yönetilen değil. i php pek deneyime sahip, bu yüzden birisi nasıl ben 'eval' olmadan kodunu yazabilirsiniz bana tavsiye eğer ben memnun olacaktır. i bir değişken depolanan bir sınıf adı vardı, ve ben bu sınıf statik bir yöntem aramak zorunda durum, classname güvenilir bir kaynaktan geldi. bu yüzden böyle bir şey yazmak zorunda kaldım:

eval("\$result = $className::methodName()");

(Sadece $ SınıfAdı :: methodName yazamıyor, çünkü ());

Sen önce PHP 5.3 anonim fonksiyonlarını kullanmak istiyorsanız, bir eval () çağrısı sarar ki, create_function kullanmanız gerekir.