HTML kaynağı görüntüleme PHP sözdizimi

5 Cevap php

Benim CMS ben bir db için hangi güncelleştirmelerin <div><?php include("my_contact_form.php") ?></div> bu kodu ekledim. Tamam orada görebilirsiniz.

Ben db çağrısından sonra benim görüntüleme sayfası bu php kodu var:

$content = $row['content'];

Ben vücut içinde $ içeriği echo bu HTML kaynağında görüntülenir:

<div><?php include("my_contact_form.php") ?></div>

How could this possibly be? Why wouldn't it show my contact form? If anyone has any suggestions I would be extremely grateful. Cheers.

5 Cevap

Basit bir çözüm içeriğine eval () çalıştırmak.

$content = $row['content'];

eval("?>".$content."<?php");

Kapanış PHP etiketi ve açılış PHP etiketi, eval () deyimi içine HTML ve PHP gömmek için izin verir.

Dosyaları vs PHP ve DB depolama seçimi hakkında.

Eğer hedef olduğunuzu varsayarak bir arayüzden adminleri tarafından düzenlenemez ve sunucu tarafından idam edilebilir PHP sahip olmaktır.

İki seçeneğiniz var:

Write the PHP to files, and include or exec() the files. Write the PHP to the DB, and exec() or cache the content to files and include().

If you're on a dedicated or VPS server, then writing to files is the best choice. However, if you're on a shared hosting system, then writing to DB is actually the safer choice. However, this comes with the task that you must use a very safe system for querying the database, to eliminated all SQL injection possibility.

DB paylaşılan bir ortamda güvenli nedeni PHP dosyaları için PHP işlemi için yazma erişimi gerekir olmasından kaynaklanmaktadır. Ne yazık ki, "her" hosting kurulumu üzerine, aynı PHP kullanıcı her hesabına çalışır ve böylece aynı PHP dosyalarına yazma erişimi vardır. Yani kötü niyetli bir kullanıcının sadece sizin gibi barındırma ve aynı fiziksel makine üzerinde arazi için kaydolmak, sizin veya erişmek için farklı bir hesap yararlanma vardır.

Bu ayrıcalıklara sahip olmadığından MySQL PHP tasarrufu ile, PHP mysql dosyaları yazamıyor. SQL enjeksiyon olasılığını ortadan kaldırmak eğer öyleyse, daha güvenli kod ile sonuna kadar. Eğer yazma yeteneği ile bir SQL enjeksiyon açığı varsa, o zaman da bir uzaktan kod yürütme güvenlik açığı açtı unutmayın.


Edit:

Maalesef doğru sözdizimi şöyledir:

eval("\r\n?>\r\n ".$php."\r\n<?php\r\n");

Her PHP yapılandırma / kurulum üzerinde çalışmak için oldukça yoğun Thats test edilmiştir.

Eğer veritabanında PHP kodu saklamak ve bunu echo zaman yürütülecek bekliyor gibi geliyor. Bu kadar PHP yorumlayıcısı ilgili olarak sadece metin (değil PHP kodu) yani sadece o yankı, olmayacak.

Sen eval() function ile dize (/ run) kodu yorumlamak için PHP zorlayabilir, ama bu güvenlik uyarıları büyük bir dizi ile geliyor.

Veritabanında kod saklama nadiren doğru çözümdür.

Sadece değerini yazdırır, ama bunun içinde herhangi bir PHP yürütmek olmadığını, $ içerik yankılanan ediyoruz.

If you're using an existing CMS, like Joomla, Drupal, etc.
The CMS is handling the text from the DB as what it is - text. It won't execute the text, it's probably just pulling it as a string from the DB and echoing it onto the page. See Brenton Alker's answer for a better explaination.

Mümkünse, CMS işlevselliği içinde çalışmak, ve CMS kaynak kullanmak hack önlemek için daha iyi olurdu eval(). Başka dosyadan kod eklemek için: Kullanmakta olduğunuz CMS bağlı bir özellik (bir Düzenleyicinizde düğme veya benzer yani) olabilir.

Veya belki de size bir "nesne" haline eklemek için çalışıyoruz ki (HTML gibi) kod yerleştirmek için izin verecek "nesneleri", "modüller", whatever-they-wanted-to-call-them, oluşturmak için bir özellik, {[ (1)]}, çok sayıda sayfalarında bunu dahil etmek için izin. Bu (kod yeniden aynı kaçınarak, tek bir yerde, vb değişiklikler yaparak) PHP bir include() yapıyor gibi aynı hedeflere ulaşmak istiyorsunuz ama aynı zamanda CMS kesmek veya güvenliğini riske başlamak zorunda sizi kurtaracaktır.

If you've built your own CMS
You may want to build such a feature in. It all depends on your needs, and how important security is.

Sonuçta eval() kullanmak, ve eğer kimse kesmek ya eğer:

  • DB
  • Sizin CMS yönetici arayüzü

sonra sunucu üzerinde herhangi bir PHP kodu çalıştırmak mümkün olacak. Eğer exec() (güvenli değil) php.ini etkin varsa, o zaman onlar da eeek ... any code they want on your server itself çalıştırmak mümkün olacak!

Bunun için teşekkürler - basit çözümler benim için en iyisidir! Çok ekstra bilgi için teşekkürler. Eğer burada benim için işe yaramadı önermek gibi () ne yazık ki eval. Yani, Plan C, I contact_form sayfasını çağırır ve tüm işlem iframe olur bir iframe olan bir seçilebilir TinyMCE şablon oluşturmak için karar verdik. Bu çalışıyor. Herkese teşekkürler!