2014-10-19 3 views
1

У меня есть код веб-сайта, в котором используется cURL (не совсем «моя» .. часть проекта с открытым исходным кодом) и после загрузки сайта на локальном хосте моей виртуальной машины для первый раз в месяцах, потому что я хочу помочь с недавней проблемой, которая возникла, которая не связана с cURL, я исправил одну локальную проблему, которая была очевидна для меня, и теперь, когда я пытаюсь войти на сайт, я получаю эту ошибкуPHP curl_setopt() error недопустимые символы

curl_setopt(): Curl option contains invalid characters (\0) 

Независимо от того, что я испортил, это, похоже, происходит, пытаясь загрузить любую страницу, а не только страницу входа. Это строка кода, он указывает на

curl_setopt($re, CURLOPT_COOKIE, "slim_session=".$_COOKIE['slim_session'].";"); 

Если это помогает, через error_log() «ИНГ я обнаружил, что значение $_COOKIE['slim_session'] является a:4:{s:10:"slim.flash";a:0:{}s:11:"AccessToken";O:48:"SolasMatch\\Common\\Protobufs\\Models\\OAuthResponse":4:{s:8:"

К сожалению завиток не мой конек, но я могу предоставить больше информации о ситуации по мере необходимости. Вы можете увидеть полную функцию вышеприведенного кода от here.

+0

Да, файл cookie содержит нулевой байт (после s: 8 :). Вам нужен код, который проверяет и дезинфицирует файл cookie, прежде чем передавать его в CURL. – georg

+0

Вы не должны сериализовать объекты таким образом, потому что частные и защищенные свойства имеют нулевой символ в их имени. –

+0

У вас есть идеи, почему этот код мог работать до или на разных машинах и т. Д.? Есть ли что-то, что произошло в довольно недавнем обновлении PHP или cURL? Просто FYI, моя виртуальная машина находится на Ubuntu 14.04 LTS, в то время как машины, над которыми я работал бы раньше, на месте, где у меня было место работы, где был установлен сайт, находятся на некоторой версии 12.04 LTS, поэтому, возможно, из-за этих версий PHP и таких могут быть разными .. –

ответ

1

Проблема заключается в том, что защищенные свойства упорядочиваются особым образом, т.е .:

s:14:"\000*\000_descriptor";N 

И эти нулевые символы запрещены при установке Curl опции как часть изменений, внесенных в связи с this security issue.

Передача сериализованных объектов таким образом является рискованной, если значения не исходят из надежного источника или не имеют подписи под защитой от несанкционированного доступа. Возможно, вы сможете заставить его работать с помощью первого URL-кода, кодирующего сериализованное значение.

curl_setopt($re, CURLOPT_COOKIE, "slim_session=" . urlencode($_COOKIE['slim_session']) . ";");