Command Palette

Search for a command to run...

PHP Unserialize Online: leia dados serializados sem um servidor PHP

PHP Unserialize Online: leia dados serializados sem um servidor PHP

T
Toolz Team
|Jul 10, 2026|13 min ler

Parte da coleção Programação

PHP Unserialize

Decodificar e visualizar os dados de strings serializados do PHP, JSON e Base64 com vista em árvore

Usar PHP Unserialize

O formato não possui especificação fora da implementação; o Manual PHP para unserialize() é a referência e é explícito que a passagem de informações não confiáveis não é segura.

A primeira vez que os dados do PHP serializados me custaram uma tarde, era um ticket de suporte WP Adminify. As configurações do widget do painel de instrumentos de um usuário deram errado, e as configurações que eles descreveram viviam no wp_options Tabela como uma única string serializada que parecia ruído de linha: a:4:{s:8:"_builtin";b:1;.... Não consegui ler, não pude dizer de relance o que estava errado, e não queria criar um ambiente completo do PHP apenas para print_r uma linha. A tarde é por isso que me preocupo em ter um decodificador que esteja a uma guia do navegador.

Se você trabalha em WordPress, WooCommerce, Laravel ou qualquer base de código legada do PHP, você encontrou dados serializados, quer você quisesse ou não. Ele aparece em tabelas de opções, arquivos de sessão, armazenamentos de cache e meta de postagem. E quando algo quebra, poder ler rápido é a diferença entre uma dose de cinco minutos e uma tarde.

Este guia cobre o que o formato serializado realmente é, como decodificá-lo com o desmarcar ferramenta em Toolz.dev e - o que é mais importante - a única limitação real que você precisa conhecer antes de confiar na saída de dados que não sejam em inglês.

tl;dr: php serialize() Empacota valores em uma string digitada como a:2:{s:4:"name";s:5:"Alice";...} onde cada peça carrega seu tipo e comprimento. o Ferramenta dessubstituir Analisa isso no seu navegador e mostra como uma árvore, print_r, var_dump& quot; JSON - nenhum servidor PHP, nenhum upload de dados Grande ressalva Eu me verifiquei: ele conta o comprimento da cadeia em unidades de código UTF-16, não bytes, então dados serializados contendo acentos, emoji ou caracteres CJK podem analisar incorretamente ou falhar Para dados ASCII é confiável Ele lê dados; ele não resolve referências de objetos ou permite editar no lugar.

O que é serialização PHP, realmente?

A serialização transforma um valor PHP - uma matriz, objeto, string, inteiro, o que quer que seja - em uma string plana que você pode armazenar em uma coluna de banco de dados ou em um arquivo e posteriormente reconstruir com unserialize(). Duas funções fazem o trabalho: serialize() Converte um valor para a string e unserialize() converte de volta.

O que torna o formato legível quando você sabe que o código é que cada valor anuncia seu tipo e tamanho. Aqui está todo o vocabulário:

s:5:"hello"              // string:  s:length:"value"
i:42                     // integer: i:value
d:3.14                   // double:  d:value
b:1                      // boolean true (b:0 is false)
N;                       // null
a:2:{...}                // array:   a:count:{key;value;...}
O:8:"ClassName":1:{...}  // object:  O:namelen:"Class":propcount:{...}

Portanto, uma matriz associativa serializada é assim:

a:3:{s:4:"name";s:10:"John Smith";s:5:"email";s:16:"[email protected]";s:4:"role";s:5:"admin";}

Que é apenas este array PHP, bem embalado:

array(
    'name'  => 'John Smith',
    'email' => '[email protected]',
    'role'  => 'admin'
)

Compacto para a máquina, quase ilegível para um humano às 14h em uma chamada de suporte. Esse é todo o problema que a ferramenta resolve.

Como a ferramenta Toolz.dev Unserializar a decodifica?

Você cola a string e analisa o formato diretamente em JavaScript em seu navegador e renderiza o resultado. Eu testei cada um deles no analisador da ferramenta enquanto escrevia isso, então o comportamento abaixo é o que ele realmente faz, não o que um manual supõe.

Arrays sequenciais com chave inteira voltam como uma lista real. a:2:{i:0;s:5:"apple";i:1;s:6:"banana";} decodifica para ["apple", "banana"]. As matrizes associativas voltam como objetos com chave. As estruturas aninhadas aninham-se corretamente, arrays dentro de matrizes dentro de objetos, até o fim.

Os objetos mantêm o nome da classe. O:4:"User":2:{s:4:"name";s:3:"Bob";...} decodifica com um __class__ marcador de "User" além de suas propriedades, para que você possa ver tanto o tipo quanto os dados Ele ainda lida com o caso estranho de propriedades privadas e protegidas, que o PHP serializa com prefixos de byte nulo em torno do nome da classe - a ferramenta retira isso e mostra o nome da propriedade limpa.

Você obtém oito formatos de saída para alternar entre: visualização em árvore, print_r, var_dump, var_export, Krumo, FirePhp, DBug e JSON simples. Eu moro em uma visão de árvore para explorar e JSON para copiar em outra coisa, mas se sua memória muscular espera var_dump saída, está aí.

A única limitação que você precisa saber: strings de vários bytes

Esta é a parte que eu gostaria que alguém me dissesse antes de eu confiar em um decodificador sobre os dados de produção, então aqui está ele inicial.

O formato serializado do PHP mede o comprimento da string em bytes. A ferramenta mede isso em Comprimento da string do Java, que conta as unidades de código UTF-16. Para ASCII simples, esses são o mesmo número, então os dados em inglês decodificam perfeitamente. No momento em que uma string contém um caractere UTF-8 de vários bytes, eles divergem.

Pegue a palavra "café". s:5:"café" - comprimento cinco, contando bytes A ferramenta lê isso 5 e pega cinco Unidades de código da corda, que é café" - engole a citação de encerramento e perde o seu lugar Eu corri exatamente isso: um autônomo s:5:"café"; Decodifica o valor errado e dentro de uma matriz como a:2:{s:1:"a";s:5:"café";s:1:"b";i:1;} ele falha totalmente com Unknown type ':' at position 25.

A conclusão prática: se você estiver depurando opções do WordPress que são ASCII puro - a maioria das configurações do plugin, slugs, sinalizadores booleanos - você está bem. Se os dados serializados contiverem nomes acentuados, emoji ou texto CJK, a decodificação poderá corromper ou errar, e isso é um bug real na ferramenta, não nos seus dados. (Para registro, a correção em nossa extremidade é analisar pelo comprimento de byte UTF-8 em vez de .length; está na minha lista.) Quando você o atinge, os comandos de reconhecimento de serialização do WP-CLI no servidor são o fallback confiável.

Há uma ressalva mais suave e relacionada: o var_dump A saída relata comprimentos de strings usando a mesma contagem de unidades de código, portanto var_dump("café") mostra string(4) onde o php real diria string(5), e um emoji mostra um comprimento que também não corresponde à contagem de bytes do PHP. Leia esses números como "comprimento do JavaScript" e não "comprimento do byte do PHP".

Por que você precisa dessérie de dados fora do PHP?

Muitas razões, e quase nenhuma delas é "por diversão"

A depuração é a grande. Um relatório de bug diz que as configurações do usuário estão erradas; as configurações são um blob serializado no banco de dados; você não pode ver o problema até decodificá-lo. O fluxo de trabalho que uso é: SELECT option_value FROM wp_options WHERE option_name = 'widget_text';, copie o resultado, cole-o no Ferramenta dessubstituir, e leia a árvore. Dez segundos em relação a escrever um script PHP descartável.

As migrações são as sorrateiras As cadeias serializadas incorporam seus próprios comprimentos, então um ingênuo find-and-replace em um dump de banco de dados - digamos, trocando um domínio antigo por um novo - altera o conteúdo da cadeia sem atualizar o prefixo de comprimento, e cada valor afetado torna-se não serializável A decodificação primeiro mostra exatamente quais valores carregam o domínio para que você saiba o que uma pesquisa e substituição simples quebrará. (A ferramenta correta para a substituição em si é WP-CLI' s search-replace, que entende a serialização.)

Depois, há inspeção de cache e sessão - Redis, Memcached e caches de arquivos em aplicativos PHP geralmente contêm valores serializados - e revisão de segurança, onde você precisa ver o que é realmente armazenado antes de poder avaliar se é seguro.

A decodificação de dados serializados no navegador é seguro?

Mais seguro do que fazer isso em PHP e vale a pena entender o porquê.

PHP nativo unserialize() Possui um longo histórico de segurança. Alimentado uma string criada, ela pode instanciar objetos arbitrários e acionar seus métodos mágicos (__wakeup, __destruct), que sob as condições corretas se torna um ataque de injeção de objeto e, na pior das hipóteses, uma execução remota de código. É por isso que o conselho de pé é nunca ligar unserialize() em entrada não confiável e para passar ['allowed_classes' => false] Quando você deve.

A ferramenta do navegador evita tudo isso porque nunca corrida PHP. Ele lê o formato de string e exibe a estrutura - nenhum objeto PHP é criado, nenhum método mágico dispara e não há intérprete para explorar Os dados também permanecem no seu dispositivo; ele é analisado localmente e nunca enviado para um servidor, o que importa quando o blob serializado é uma sessão ou outra coisa que você prefere não carregar. Então para inspeção Dados serializados não confiáveis, o navegador é genuinamente o local mais seguro.

PHP nativo unserialize() Ferramenta de navegador Toolz.dev
instancia objetos Sim (risco de injeção) Não - lê apenas estrutura
Executa em um servidor sim Não - local no navegador
Seguro em entradas não confiáveis Somente com allowed_classes Sim, nunca executa
Lida com comprimentos de vários bytes corretamente (bytes) Não de forma confiável (unidades de código)
Resolve referências de objetos sim Não - shows [Reference]
propósito Reconstruir valores ao vivo Inspecione e leia

Essa tabela também é um resumo honesto da troca: a ferramenta do navegador é o leitor seguro, não um substituto para a função de idioma.

Quais são as fontes comuns do mundo real?

Se você está aqui, provavelmente é um desses. O WordPress se apoia fortemente na serialização em wp_options - widget_text, sidebars_widgets, theme_mods_*, a lista de plugins ativos, agendas cron. O WooCommerce armazena variações de produtos, atributos e campos personalizados como meta de postagem serializada, e é por isso que um produto com preços incorretos remonta a um valor serializado. Laravel usa serialização para armazenamento de cache de arquivos e sessão. O sistema de configuração do Magento está cheio disso. Mesmo formato em todos os lugares; mesma abordagem de decodificação.

Algumas coisas que a ferramenta não faz

Dois limites honestos Ele não resolve referências - PHP pode serializar um ponteiro para um valor anterior (r: ou R:), e a ferramenta mostra-as como literais [Reference] marcador em vez de os seguir E é um leitor, não um editor: não existe nenhum & quot; altere este valor e re-serialize" modo Para modificar os dados serializados, descodifique - os, faça a sua alteração no PHP ou no JSON, e re - serialize no lado do PHP Se tiver de editar manualmente a cadeia bruta, lembre - se que tem de fixar os prefixos de comprimento também, e - de acordo com a secção acima - conte bytes, não caracteres.

Perguntas frequentes

Para que serve a serialização do PHP?

Ele converte valores complexos, como matrizes e objetos em uma única string que pode viver em uma coluna de banco de dados, em um arquivo ou em um cache, e ser reconstruído posteriormente. WordPress, WooCommerce, Laravel e Magento usam-no fortemente para configurações, dados de sessão e valores armazenados em cache.

Posso cancelar a serialização de dados do PHP sem um servidor PHP?

Sim. o Ferramenta dessubstituir Analisa o PHP serializado em JavaScript no seu navegador. Sem instalação do PHP, sem servidor, sem conta.

É seguro decodificar dados serializados no navegador?

Sim, e é mais seguro que o PHP unserialize() Na entrada não confiável, porque a ferramenta lê apenas a estrutura da string. Ele nunca instancia objetos PHP, então os ataques de método mágico que fazem nativos unserialize() perigoso simplesmente não pode acontecer.

Por que minha string serializada não decodifica?

As causas usuais são uma cópia truncada (você perdeu as chaves ou o primeiro caractere), um prefixo de comprimento quebrado após uma localização e substituição, ou dados que não são realmente PHP serializados. Mais uma que pega as pessoas: se a string contiver caracteres acentuados, emoji ou texto CJK, a contagem de comprimento da unidade de código da ferramenta pode ser mal analisada, porque o PHP conta o comprimento da string em bytes e a ferramenta conta unidades UTF-16.

Posso decodificar os valores do WordPress WP_OPTIONS com ele?

Sim - esse é um dos usos mais comuns Consulte o option_value, cole-o e leia a estrutura. Apenas esteja ciente de que, se a opção contiver texto multibyte, você pode precisar de WP-CLI no servidor.

Posso editar dados serializados com esta ferramenta?

Não, é um leitor. Para alterar um valor, decodifique-o, edite em PHP ou JSON e re-serialize novamente no lado do PHP. Editando manualmente a string bruta significa corrigir você mesmo os prefixos do comprimento do byte, que é propenso a erros.

Qual é a diferença entre serialização PHP e JSON?

A serialização preserva os tipos específicos do PHP, incluindo nomes de classes de objetos e propriedades privadas. JSON é independente de linguagem e conhece apenas strings, números, booleanos, null, arrays e objetos. O novo código geralmente prefere JSON porque json_decode() Não instancia objetos, por isso evita o risco de injeção e JSON é legível em todos os lugares. Você pode mover uma estrutura decodificada para o formatador json trabalhar com isso dessa maneira.

A ferramenta lida com objetos serializados, não apenas com arrays?

Sim. Os objetos decodificam com o nome da classe preservado junto com as propriedades e propriedades privadas ou protegidas (que serializa o PHP com prefixos de byte nulo) para nomes legíveis na saída.

conclusão

Os dados do PHP serializados são inevitáveis se você tocar no WordPress, WooCommerce ou Laravel, e poder lê-los sob demanda transforma uma categoria de bugs frustrantes em rápidos. o Ferramenta dessubstituir faz isso em uma guia do navegador, com segurança, sem um servidor PHP - desde que você saiba que é uma borda real: strings multibyte podem tropeçar na contagem de comprimento, e os dados ASCII são onde eles brilham Cole, leia, corrija. E quando os dados estiverem cheios de sotaques ou emoji, procure WP-CLI.


Ferramentas relacionadas:

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!