Executando verificação de segurança...
2

Esse post mostra como o ChatGPT está longe de ser infalível e ainda precisa de alguém conferindo tudo que ele faz (de preferência, alguém que saiba o que está fazendo, em vez de aceitar cegamente tudo que ele responde).

O código que ele gerou é vulnerável a ataques de SQL injection. Afinal, em uma aplicação web espera-se que os ids do post e do usuário venham como parâmetros do request (seja POST ou GET). E concatenar parâmetros diretamente na query (ainda mais quando vem de fora da aplicação) é pedir pra tomar um SQL injection. Inclusive, na própria documentação tem um aviso sobre isso.

Uma solução melhor é usar bind_param, consulte a documentação para mais detalhes. Por exemplo:

$stmt = $db->prepare('SELECT COUNT(*) as count FROM likes WHERE post_id=?');
if(!$stmt){
    echo 'erro na consulta: '. $db->errno .' - '. $db->error;
}

$stmt->bind_param('i', $post_id);
$stmt->execute();
$stmt->bind_result($likes_count);
$stmt->fetch();
// mostrar o $likes_count, etc

Claro que uma validação evitaria o problema, mas outra vantagem é que acima usamos prepare, e com isso as consultas preparadas são implementadas no lado do servidor do banco de dados. Com isso, o PHP manda somente os parâmetros a cada vez que a mesma consulta preparada é enviada para o servidor quando usa a mesma conexão persistente, mesmo que esteja atendendo uma requisição HTTP diferente. Ou mesmo se estiver executando em um loop, da segunda execução em diante ele só manda os parâmetros, reaproveitando o plano de execução da query.

Para mais informações, leia aqui e aqui.

Carregando publicação patrocinada...
2

Isso é bem grave. E o pior é que geralmente quem usa o ChatoGePeTo não costuma ter a criticidade para pegar esses problemas, a pessoa obtém a resposta e usa. Quem verificaria costuma ser quem não confia em um gerador de texto que não é um programador e não usa.

E é um ciclo vicioso porque a pessoa que tenta usar esse mecanismo de LLM precisa aprender ainda, e usado ele a pessoa aprende errado e não consegue evoluir, e m vários sentidos.

Fora que isso gera algo sem contexto, que não seria um problema para alguém que consegue fazer um questionamento do resultado. Aí a pessoa começa usar a solução e torce o problema para ela se encaixar no que foi entregue pela IA.

Em outros tempos eu diria que isso acabaria rápido, mas já aprendi que não acontece. Então é torcer para que os resultados se tornem muito melhores, dando mais contexto (o que depende muito da entrada de dados, o que ainda exigiria a pessoa entender bem o que está fazendo) e evitando entregar coisas com erros graves, o que eu achamo que LLM não é a solução para isso, ainda mais porque usa como base de dados a internet que sabemos que em alguns assuntos tem mais o erro que o acerto.

E não adianta alertar, quase sempre haverá, como sempre, duas bolhas, e uns vão embarcar nessa sem dó, e outros vão perceber de uma forma ou de outra, mesmo sem o alerta, por isso eu estou estou formando material para escrever algo canônico meu sobre o assunto e depois não vou ficar falando tanto.

Faz sentido?

Espero ter ajudado.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Concordo com vocês, porem as vezes para quem está começando é um ponto de partida a ser utilizado para sair da inercia, ai com estudo vai se evoluindo o código e a aplicação.

Confesso que com o passar dos anos, me acostumei com os frameworks e a forma como trabalho com eles, afinal já são uns 8 ou 9 anos trabalhando com codeigniter, algumas coisas o proprio framework faz por mim, acabei ficando meio preguiçoso.

Recentemente comecei alguns estudos com Laravel, e tenho gostado bastante, principalmente nas questões de trabalho com base de dados.