Ben bir MySQL veritabanında depolanan PHP çağıran bir sayfa yazmaya çalışıyorum. MySQL veritabanında saklanır sayfa I sayfa yük üzerinde çalıştırmak istediğiniz PHP (ve HTML) kodunu içerir.
Bunu nasıl yapıyor hakkında gidebiliriz?
Bunun için eval komutunu kullanabilirsiniz. Bu yaklaşımı kullanarak tuzaklar bir sürü var, çünkü bu olsa karşı tavsiye ederim. Hata ayıklama (er) zor, bazı güvenlik risklerini (DB kötü içerik ah ah, idam olur) anlamına gelir.
Örneğin (rastgele bir kişi tarafından blogpost) Eval is Evil bakın. Eval için Google Evil, ve size başka bir çözüm bulmak gerekir neden bir çok örnek bulabilirsiniz.
Toplama: patlatır bazı referansları ile bir başka güzel bir yazıdır this blogpost. Yanlış Eval kullanımının neden olduğunu geçmiş vBulletin ve phpMyAdmin patlatır ifade eder.
Siz PHP eval fonksiyonuna bakabilirsiniz. Bu rasgele PHP kodu çalıştırmak için izin verir. Ama, büyük bir güvenlik riski olabilir, ve en iyi kaçınılmalıdır.
eval()
function burada diğer tepkiler kaplıydı. Ben kesinlikle gerekli olmadıkça eval
kullanımını sınırlamak gerekir katılıyorum. Bunun yerine db PHP kodu sahip metodunu, diyelim ki, denilen execute()
vardır, sadece bir sınıf adı olabilir. Size özel PHP kodu sadece üzerine db ve çalışma ->execute()
sizi sadece getirilen isim sınıf örneğini çalıştırmak için ihtiyaç duyarsan. Bu çok temiz bir çözümdür ve size esneklik büyük alanını verir ve anlamlı site güvenliğini artırır.
Eğer (aralarında farklılık ve modüller) çeşitli tesisler için farklı çatal saklamak için Kaynak Kontrol sistemini kullanarak düşündünüz mü? Bu Aklıma uygulama yapılandırması için birkaç en iyi uygulamalarından biri olacaktır. Sevgiler alışılmadık bir gereklilik değildir, bu nedenle geçmişte başkaları tarafından çözüldü bir sorun; ve bir veritabanında kod saklamak Ben zor bir zaman referans bulma, ya da en iyi uygulama olarak tavsiye ediliyor olurdu düşünüyorum biridir.
İyi bir şey, açıklama yayınlanmıştır. Muhtemelen istemeden uygun bir soru arayışı içinde bir cevap teşkil ettik.
Nasıl yaptığım bu yürütülecek gerek kod bloğu hakkında benzersiz bir şey tespit veritabanında bir alan olmasıdır. Bu tek kelime bu kodu dosya adı olduğunu. Ben dahil edilecek php dosyaya işaret etmek için bir araya dizeleri koydu. Örnek:
$ Lookfor = $ row ['sayfa'];
(.. "kaynaklar /" $ lookfor "Codebase.php") içerir;
Bir hacker size DB erişmek olsa dahi bu şekilde idam edilecek düz orada kötü niyetli kod koymak olamazdı. O belki referans sözcüğü değiştirmek olabilir, ama aslında sunucu üzerine doğrudan bir dosya koyabilirsiniz sürece ona hiçbir iyi yapardı. O sunucu üzerine dosyaları doğrudan koymak olsaydı, o gerçekten kötü olmak istiyorsa zaten sonra yokuz. Sadece benim iki sent değer.
Ve evet, depolanan kod çalıştırmak isterim nedenleri vardır, ama eksileri vardır.