Como resolvei rapidamente um plugin crítico de código aberto sem alterar uma linha de código usando ChatGPT

I’m not an early riser, mas meu despertador toca todos os dias às 5:30 da manhã. Isso acontece porque a equipe editorial com que trabalho está na Costa Leste, enquanto eu estou em Oregon. Faço uma rápida verificação dos e-mails e do Slack para garantir que nada está fora de controle, e então me acomodo para saborear uma primeira xícara de café. Assim que estou devidamente energizado, meu humor melhora consideravelmente.

Entretanto, em um dia de início de junho, meu site estava, figurativamente, em chamas. Meu serviço de hospedagem me enviou um aviso informando que um dos plugins que mantinha o site seguro tinha vulnerabilidades e precisava ser desativado. Normalmente, quando recebo um aviso desse tipo, vou à página do plugin no meu site e realizo uma atualização. Entretanto, desta vez, não havia atualização disponível. Para piorar, ao acessar a página desse plugin no repositório do WordPress (basicamente a loja de aplicativos para plugins do WordPress), encontrei um aviso preocupante.

Isso não era um bom sinal. Pesquisei e descobri que o plugin estava listado como tendo vulnerabilidades de script entre sites, entre outros problemas. Essas vulnerabilidades permitem que usuários maliciosos injetem scripts prejudiciais em sites afetados. Não é o tipo de situação com o qual se pode brincar. Desativei o plugin imediatamente.

Senti as consequências imediatamente. O plugin em questão tinha uma função muito específica no meu site: impedia o spam de registro. O spam de registro consiste na criação de várias contas de usuários falsos em um site. Spammers ou hackers fazem isso por várias razões, geralmente para estabelecer um ponto de entrada caso uma futura vulnerabilidade seja introduzida no site (como um plugin com vulnerabilidades de script entre sites) ou para criar um ponto de apoio para ataques futuros. O aumento nas contas de usuários também sobrecarrega o servidor, enche a caixa de entrada do operador do site com spam, o que pode fazer com que ele perca notificações importantes, aumenta os custos das listas de e-mail e pode, eventualmente, envenenar essas listas com endereços de e-mail inválidos.

Não sei exatamente por que os spammers estavam atacando meu site, mas assim que desliguei o plugin, comecei a receber um fluxo incessante de notificações de novos registros de usuários. Verifiquei o repositório de plugins do WordPress. Embora existam várias ferramentas anti-spam, a maioria é muito abrangente. Eu já tinha outras ferramentas de segurança funcionais; apenas queria bloquear o spam de registro. Não encontrei nenhuma ferramenta que realizasse essa função específica. Assim, decidi pedir ajuda a uma IA para criar uma.

O poder do código aberto se torna verdadeiramente evidente aqui. O WordPress e todos os plugins do WordPress são escritos principalmente em PHP e JavaScript. Ambas as linguagens são interpretadas, e não compiladas. Linguagens interpretadas são lidas e executadas pelo computador durante a execução, portanto, o código-fonte precisa estar disponível para que o computador possa acessá-lo. Em contraste, linguagens compiladas convertem o código-fonte em bits e bytes, de modo que, quando os programas compilados são distribuídos aos computadores dos usuários, seu código-fonte não é incluído. Como condição para inclusão no repositório de plugins, todos os plugins do WordPress devem ser distribuídos em formato de código aberto, com uma licença que permita modificações. Isso significa que não apenas o código-fonte está disponível, mas ele é acessível para que qualquer pessoa o utilize e modifique.

Na maioria das vezes, isso não acontece, porque um produto de plugin é muito mais do que apenas seu código. Inclui também toda a documentação, ativos de suporte e, acima de tudo, o suporte do desenvolvedor. Mas, no caso do plugin que impedia spam de registro, o desenvolvedor aparentemente havia interrompido seu suporte. No início de junho, o repositório bloqueou os usuários de baixá-lo – aparentemente devido a seus problemas de segurança internos. Contudo, eu tinha uma cópia do plugin e, portanto, todo o código-fonte, salvo no meu servidor. Eu também tinha o direito inerente de examinar o código e fazer alterações. E foi isso que fiz.

A primeira coisa que quis saber era o que estava de errado com o plugin. Também queria entender suas funções e estrutura. Mas, acima de tudo, queria saber o que o fez ser banido. Uma vez que o modelo ChatGPT Plus o3 permite que o Deep Research examine um repositório do GitHub, carreguei uma cópia do plugin defeituoso em um novo repositório privado e ofereci acesso ao ChatGPT. Em seguida, construí um prompt de pesquisa profunda para o ChatGPT. Sou o gestor de um site que está recebendo registros de usuários indesejados. Até recentemente, contei com um plugin chamado Stop Spammer Registrations, que estou prestes a pedir que analise. Infelizmente, ele foi desativado pelo meu provedor de hospedagem e pelo repositório de plugins do WordPress devido a preocupações de segurança não especificadas.

Portanto, preciso construir meu próprio plugin que replique grande parte da funcionalidade desse plugin bloqueado. Sua tarefa é examinar todo o código, identificar os mecanismos de proteção contra spam que ele usa, fornecer detalhes de como eles funcionam e elaborar um conjunto detalhado de instruções para o OpenAI Codex criar um novo plugin com funcionalidade similar. Também, enquanto examinam o código, peço que identifiquem as preocupações de segurança ou malware que causaram inicialmente o bloqueio do plugin.

Deixei o Deep Research em ação. Vinte minutos depois, recebi uma análise de 16 páginas que descrevia tudo o que queria saber sobre o plugin. Embora o plugin utilizasse uma vasta gama de técnicas para bloquear spam de registro, a análise concluiu que “essas vulnerabilidades poderiam permitir que atacantes comprometessem a segurança do site – ironicamente usando um plugin anti-spam como ponto de entrada.” Foram listadas uma extensa série de vulnerabilidades, incluindo: vulnerabilidades de falsificação de solicitação entre sites (CSRF), XSS refletido, injeção de objeto PHP não autenticada, sanitização e validação de entrada inadequadas ou inexistentes, sanitização de saída inadequada ou inexistente, e padrões de código suspeitos. Para cada um desses problemas (e mais alguns), foram fornecidas informações detalhadas e úteis. Com base na análise, ficou claro que o plugin não era algo que eu conseguiria depurar e corrigir. Mas não precisei. O relatório do Deep Research também ofereceu um guia passo a passo para produzir um plugin semelhante com proteções contra spam equivalentes, juntamente com orientações para codificá-lo de maneira segura. Isso também foi uma leitura fascinante.

Para resumir, até agora, a IA havia fornecido uma análise que explicava o que houve de errado com o plugin original que foi desativado, bem como o que seria necessário para reproduzir um plugin que oferecesse todos os serviços do plugin original sem as vulnerabilidades. Ao ler a análise, percebi que o plugin original oferecia muitos mais recursos do que estava usando ou imaginava serem necessários. Não queria apenas reproduzir a complexidade desse trabalho, pois essa era parte do que havia causado o problema inicialmente. Apenas desejava funcionalidade básica. Pedi à IA que criasse uma especificação muito mais minimalista para meu site, uma que contivesse apenas as proteções contra spam essenciais que mantivessem os spammers afastados.

O modelo ChatGPT Plus o3 é projetado para fornecer raciocínio adicional para projetos de codificação maiores e mais complexos. Queria começar com uma nova sessão, para que o ChatGPT não fosse influenciado pelo processo de análise anterior. Em uma experiência prévia com o ChatGPT, aprendi o valor de iniciar com uma nova sessão. O ChatGPT tende a se desviar quando as sessões ficam longas, portanto, começar uma nova sessão significava que meus prompts seriam tratados com clareza. Entretanto, queria que o modelo o3 visse os resultados da análise anterior. Então, salvei essa análise como um PDF e a carreguei na nova sessão. Isso me ofereceu o melhor dos dois mundos. A IA tinha a análise e os detalhes do plugin falho, mas poderia começar a criar uma nova especificação do zero. Após carregar o PDF, formulei o seguinte prompt: “Dadas as informações no PDF anexado, forneça uma especificação para o desenvolvimento do conjunto mais simples de recursos para prevenir spam de registro apenas. Ignore quaisquer opções que requeiram ajustes do usuário ou projete essas opções para serem escolhas padrão. Crie qualquer especificação de página de administração exigindo o uso da ferramenta CMB2 UI. Use todas as melhores práticas de segurança do WordPress.”

O requisito era que o PDF pudesse ser fornecido ao ChatGPT e o resultado desse documento seria um plugin funcional escrito por ele. A IA trabalhou e produziu um conjunto simples de especificações. Notavelmente, identificou três mecanismos básicos de prevenção de spam: um campo de formulário “honeypot” oculto. Se esse campo fosse preenchido, indicaria que o formulário foi preenchido programaticamente, provavelmente por um bot; uma consulta API a um serviço gratuito que agrega informações sobre spam em fóruns, verificando se o nome de usuário ou endereço IP é suspeito; e uma verificação de registro MX (mail exchange) para garantir que o domínio registrado realmente existe.

Além disso, especificou uma lista de melhores práticas para plugins do WordPress que deveriam ser seguidas, como proteger todos os arquivos com defined( ‘ABSPATH’ ) || exit;, escapar todo texto voltado para o administrador com esc_html(), e envolver a ação de limpar o log em check_admin_referer( ‘rsg_clear_log’ ). O mais importante foi que a IA se comprometeu a evitar algumas práticas que poderiam provocar vulnerabilidades, tal como não chamar eval(), deserializar ou armazenar blobs base64 (mitigando CVEs observadas no plugin original). Assegurou-se de seguir os padrões de codificação do WordPress (espaçamento, nomenclatura, i18n).

Nesse momento, me senti confortável com a ideia de separar sessões e retratar apenas os resultados de uma sessão anterior em uma nova interação. Pedir ao ChatGPT: “Devolva isso para mim em um PDF”. Ele me apresentou um link, que baixei e então passei para a próxima etapa, a criação de novo código.

Neste ponto, a maior parte do trabalho já estava feita. Primeiro, pedi à IA que analisasse o código original que eu estava usando para manter meu site livre de spam de registro. Em seguida, com base nessa análise, solicitei à IA que criasse uma especificação mínima que funcionasse para meu site. Finalmente, chegou a hora de carregar o PDF de especificações no modelo o3 e gerar o código. Foi uma questão de fazer o seguinte prompt: “Por favor, leia o PDF anexado, siga suas especificações e me forneça um arquivo zip para download e instalação.”

91 segundos depois, a IA havia gerado o código. Funcionou? Sim. Funcionou perfeitamente. Instalei o plugin recém-criado em meu site, e o spam de registro caiu drasticamente. Também não tive problemas com novos registros de usuários regulares. Tudo funcionou como deveria. Há mais de um mês estou utilizando o novo plugin sem qualquer problema. Vale ressaltar que este projeto foi primordialmente sobre contexto, não apenas sobre comandos. Isolei cuidadosamente cada interação com a IA, permitindo um controle mais cuidadoso do ponto de partida que a IA usava.

Essa prática funcionou excepcionalmente bem. Ao invés de ter que redirecionar a IA quando ela inevitavelmente se desviava, simplesmente a alimentava com um conjunto de instruções pré-montadas e a deixava começar de novo. Mais importante ainda, uma capacidade da qual eu confiava foi restaurada. Essencialmente, este projeto uniu dois movimentos poderosos: código aberto e IA generativa, combinando-os. O que acontece quando você mescla código aberto com IA? Exatamente o que você precisa. Considerando o quão frustrante frequentemente sou em relação às delusões e rigidez dos chatbots de IA, essa abordagem funcionou de forma rápida e resolveu um problema real de gerenciamento de servidor. Do início ao fim, o processo levou cerca de uma hora. O novo código vem funcionado por várias semanas sem problemas. Escrever este artigo levou muito mais tempo do que escrever o código que descrevo aqui.

Se você já tentou usar o ChatGPT ou outra ferramenta de IA para analisar ou reconstruir código real, sinta-se à vontade para compartilhar suas experiências e insights. Como você usaria uma pesquisa profunda em seus próprios projetos? Acredita que esse nível de análise automatizada é algo em que pode confiar para seus sistemas de produção? E caso você já tenha enfrentado falhas em plugins ou alertas de segurança, como lidou com elas? Deixe suas opiniões nos comentários abaixo.

Referência: PM Images / Getty Images

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima