簡體   English   中英

eval替代PHP中的處理規則?

[英]eval alternative to processing rules in PHP?

我知道找到eval()替代方法是一個常見的話題,但是我正在嘗試做我以前沒有做過的事情。 我正在處理已知格式的CSV文件,並且已根據可用的源列建立了如何處理數據的規則。

這是我正在做的簡化示例。 在此示例中, $linedata表示CSV文件中的一行數據。 $key["type"]指向我需要數據的列。 如果此列保留“ IN”的值,則我希望將$newcol設置為“ individual”,否則設置為“ organization”。

$key["type"] = 12;
$linedata[12] = 'IN';
$rule = '($linedata[($key["type"])] == "IN" ? "individual" : "organization");';
eval ('$newcol = ' . $rule);

因此$rule存儲了邏輯。 我可以在$linedata數組上運行過濾器,以嘗試防止來自CSV文件的惡意代碼,但是我想知道是否有更好的方法來存儲和處理這樣的規則?

您不能將任意PHP存儲在CSV文件中,然后期望它在不調用eval (或類似功能)的情況下工作。

執行要求的安全方法是將文件視為數據 ,而不是代碼。

這就是存在諸如BBCode之類的語言的原因:您不能讓惰性語言直接觸發活動功能,因此您創建了一種易於理解的迷你腳本語言,可讓您實現所需的功能。

換句話說,您不能在不以某種方式解釋它們的情況下將活動的“規則”存儲在文件中,並且您不能同時允許它們包含任意PHP並且是“安全的”。 因此,您可以嘗試解析和限制PHP(不要,這很困難!),也可以給他們提供一種很好的簡單語言,然后對其進行解釋。 或者更好的是,不要將邏輯存儲在數據文件中。

錯了


我可能是錯的,但是create_function可能已經足夠了。

http://www.php.net/manual/zh/function.create-function.php

暫無
暫無

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

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