如何绕过PHP eval代码中的管道符号(按位OR运算符)

时间:2014-10-10 00:03:10

标签: php wordpress plugins eval

在PHP中是否存在按位OR运算符(管道符号|)的等价物?我正在使用wordpress插入php插件来允许我的内容条目中的帖子和页面上的PHP代码,插件的工作方式是获取代码并在其上运行eval语句,但eval函数打扰某些符号,如按位OR或双管OR或美元符号$。我试图调用json_encode时遇到了一些问题,其中一些标志通过按位OR连接,当然运行时eval'ed代码被禁止。我的解决方案是将代码放入函数(如json_encode_eval())并通过调用json_encode定义函数.php中的函数,即返回json_encode($ str,FLAG | ANOTHER_FLAG); ,但有更好的解决方案吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

检查wordpress是否正在编码|到一个HTML转义代码。 (寻找

中的任何一个
| | | | |

如果是这样,你必须在逃避之前对其进行解除。

[我非常确定总是比传达用户提交的文字更好的方式 - 你可能在那里有一个巨大的安全漏洞。]

我尝试了这个并给出了预期的答案:

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

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

输出:

int(3)
int(3)