WordPress — Как обойти символ канала (побитовый оператор ИЛИ) в PHP eval’ed код

Есть ли в PHP эквивалент для побитового оператора ИЛИ (символ канала |)? Я использую плагин WordPress для вставки php, чтобы разрешить php-код в моих записях контента на постах и ​​страницах, и плагин работает так, чтобы взять код и выполнить оператор eval для него, но функция eval работает с определенными символами, такими как побитовое ИЛИ или двойной трубы ИЛИ или знак доллара $. Я столкнулся с проблемой, пытаясь вызвать json_encode с некоторыми флагами, соединенными побитовым ИЛИ, и, конечно, проверенный код сработал при запуске. Мое решение состоит в том, чтобы поместить код в функцию (например, json_encode_eval ()) и определить функцию в functions.php с помощью вызова json_encode, то есть return json_encode ($ str, FLAG | ANOTHER_FLAG); , но есть ли лучшее решение? Заранее спасибо.

0

Решение

Проверьте, кодирует ли WordPress код | в html экранированный код. (Ищите любой из

| | | | |

)

Если это так, вам придется убежать от него перед тем, как вызвать его.

[Я почти уверен, что всегда есть лучший способ, чем высмеивать отправленный пользователем текст — там может быть огромная дыра в безопасности.]

Я попробовал это, и это дает ожидаемый ответ:

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

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

Выходы:

int(3)
int(3)
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector