簡體   English   中英

是否可以從數據庫中加載執行的PHP代碼?

[英]Is it possible to load an execute PHP code out of the database?

如果我的數據庫中有PHP代碼,是否可以在PHP中以某種方式“包含”並執行它? 好吧,確定我可以寫出一個包含該內容的文件並僅包含該文件,但是也許PHP具有類似於JavaScript的eval()的功能?

是的,PHP也具有eval() ,但是使用它被認為是非常不好的做法。

這個問題很好地討論了要點,沒有完全譴責它。

大多數情況下,如果出現eval() ,則值得仔細研究您正在構建的程序:可能有更好的方法來執行此操作。 例如,如果要將數據值填充到存儲在數據庫中的HTML代碼中,則使用某種模板引擎可能是一個更好的主意。

請注意,雖然不使用eval()而是從數據庫中寫出一個文件並包含該文件,但它具有完全相同的安全風險...問題不在於eval()還是eval() ,問題在於:什么是否有人入侵您的數據庫,並且能夠修改PHP代碼? 就能讓您的服務器運行其php腳本,並執行他們喜歡的任何事情。

PHP有eval()。 但是請不要使用它! :D

您可以使用eval函數評估一些代碼-但是使用它通常被認為是不好的做法,並且有點危險。

(嗯,實際上,它的功能名稱與Javascript中的名稱相同;-)-兩種語言都是不好的做法-真是巧合; 或不)


有時使用的另一種解決方案是:

  • 將您的PHP代碼存儲在數據庫中
  • 有時(並非每次)獲取它並將其存儲到文件中,用作緩存機制
  • include該文件-將被執行

例如,我已經看到一些相當老的CMS可以這樣工作……但是請注意,它們大多在使用文件作為緩存(為了不向數據庫發出太多請求) ,即使它工作得很好。

那使用文件緩存呢? 您始終可以將PHP代碼臨時存儲在文件中並包含它。 具有文件生成,存儲在緩存中的簡單邏輯,包括正確的文件和刷新舊文件(md5校驗和+標記為文件緩存的時間戳+修改時間戳)。 然后只需比較兩個時間戳即可知道是否需要更新緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM