Como uma instrução padrão internacional para consulta de banco de dados, as instruções SQL têm sido amplamente usadas em diversos ambientes de programação. Como um sistema maduro e estável, a verificação de login e senha do usuário são essenciais. No meu trabalho diário de programação, percebi que muitos programadores usam instruções SQL para verificar senhas de usuário por meio de uma declaração como esta:
sql="Select * da tabela de usuário onde nome='"+nome+"' e senha='"+senha+"'"
O nome e a senha são os nomes de usuário e senhas inseridos pelo usuário, e as declarações acima são executadas para verificar se o usuário e a senha são legítimos e válidos. No entanto, por meio da análise, pode-se identificar que existem brechas fatais nas afirmações acima. Quando inserimos a seguinte string no nome de usuário: 111'or'1=1, e depois digitamos a senha casualmente, definimos para aaaa. Após a substituição da variável, a instrução SQL se torna a seguinte string:
sql="Select * da tabela de usuário onde nome='111'ou '1=1' e senha='aaaa'
Todos sabemos que, quando a instrução select julga as condições da consulta, ela ignora as seguintes e (e) operações ao encontrar ou (ou) operações, e o valor de 1=1 na instrução acima é sempre verdadeiro, o que significa que, independentemente do valor inserido na senha, ela pode passar na verificação de senha acima! A solução para esse problema é muito simples, e existem muitos métodos; o mais comumente usado é julgar a legitimidade do usuário e a senha inserida pelo usuário antes de realizar a verificação, e caracteres especiais como aspas simples e sinais iguais não são permitidos.
Os problemas acima, embora possam parecer simples, existem. Por exemplo, a versão inicial do famoso jogo online "Smiling Proud Jianghu" na Internet teve esse problema, e o autor também analisou cuidadosamente alguns dos programas que havia escrito antes após ler o relatório de vulnerabilidade sobre esse jogo, e havia muitas brechas desse tipo. Isso realmente deveria ser nossa atenção. Isso também expõe a falta de experiência em programação e conscientização sobre segurança dos jovens programadores, incluindo o autor. Ao mesmo tempo, também nos lembra que os programadores devem considerar plenamente a segurança do programa ao projetá-lo, e não devem ser descuidados, e uma omissão aparentemente pequena pode causar consequências sérias.
|