2014-10-10 24 views
0

在PHP中,是否有位運算符(管道符號|)的等價物?我正在使用wordpress插入php插件來允許php代碼在帖子和頁面上的內容條目中,插件的工作方式是獲取代碼並在其上運行eval語句,但eval函數打開某些符號,例如按位OR或雙管OR或美元符號$。在嘗試調用json_encode時,遇到了一些問題,其中一些標誌是按位或連接的,當然還有一些運行時被評估的代碼是錯誤的。我的解決方案是將代碼放入一個函數(如json_encode_eval()),並通過調用json_encode在functions.php中定義函數,即返回json_encode($ str,FLAG | ANOTHER_FLAG); ,但是有更好的解決方案嗎?提前致謝。如何解決PHP代碼中的管道符號(按位或運算符)

回答

1

檢查wordpress是否編碼|到一個html轉義代碼。 (查找任何的

| | | | | 

如果是這樣,你必須evalling之前取消轉義它。

[我敢肯定,有總是比evalling用戶提交的文本一種更好的方式 - 你可能有一個巨大的安全漏洞存在。]

我嘗試這樣做,它提供了預期的答案:

<?php 
eval("\$a = 2|1;"); 
$b = 2|1; 

var_dump($a); 
var_dump($b); 

輸出:

int(3) 
int(3) 
+0

Yah,這是一個安全漏洞。例如,我可以在插入php插件的情況下將javascript包含在wordpress內容中。你的解決方案(沒有測試)可能不會工作,因爲eval()不解釋&verbar;作爲按位或運算。 – 2014-10-10 02:40:15

+0

我只是想說,Wordpress可能會將您的按位或運算符轉換爲&verbar;並且您可能必須將其解碼回到|在調用eval之前。完整的猜測。 – 2014-10-10 02:42:54

+0

我將用$ anotherstring = unescape('FLAG&verbar; ANOTHER_FLAG')來嘗試json_encode($ str,$ anothertring); , 謝謝。 – 2014-10-10 02:46:33