Mysql_real_escape_string() e mysql_escape_string() são suficientes para segurança de aplicativos?
Embora essas funções possam fornecer alguma proteção contra injeção de SQL e outros ataques , eles não conseguem resolver certas vulnerabilidades.
SQL Injeção
Mysql_real_escape_string() ainda pode expor sua aplicação à injeção de SQL se você manipular indevidamente variáveis PHP nas consultas. Considere o seguinte exemplo:
$sql = "SELECT number FROM PhoneNumbers WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);
Esta consulta pode ser manipulada por um invasor para executar instruções SQL não autorizadas, pois mysql_real_escape_string() não foi projetado para proteger nomes de tabelas, nomes de colunas ou campos LIMIT.
Como ataques
Mysql_real_escape_string() é insuficiente para evitar explorações LIKE. Um invasor pode inserir um valor malicioso como "%%" para retornar todos os registros, comprometendo potencialmente informações confidenciais.
Charset Exploits
Certos navegadores podem ser vulneráveis ao charset explorações, permitindo que invasores injetem caracteres maliciosos que contornam mecanismos de escape e executam comandos SQL arbitrários.
Declarações preparadas: uma visão abrangente Solução
Para proteger efetivamente sua aplicação, é recomendado usar instruções preparadas em vez de mysql_real_escape_string(). As instruções preparadas executam consultas SQL com valores fornecidos pelo usuário, vinculando-os como parâmetros. Isso elimina a necessidade de escape manual e garante que apenas SQL autorizado seja executado.
Aqui está um exemplo de uso de uma instrução preparada em PHP:
$pdo = new PDO($dsn); $column = 'url'; $value = 'http://www.example.com/'; $limit = 1; // Validate the search parameter column. $validColumns = array('url', 'last_fetched'); if (!in_array($column, $validColumns)) { $column = 'id'; } $statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' . 'WHERE ' . $column . '=? ' . 'LIMIT ' . intval($limit)); $statement->execute(array($value)); while (($data = $statement->fetch())) { }
As instruções preparadas oferecem um mecanismo de defesa proativo, aproveitando os recursos de segurança do servidor de banco de dados subjacente. Eles são inerentemente resistentes a ataques conhecidos e desconhecidos, garantindo a integridade dos seus dados.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3