"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Usar `mysql_real_escape_string()` e `mysql_escape_string()` é suficiente para proteger seu aplicativo?

Usar `mysql_real_escape_string()` e `mysql_escape_string()` é suficiente para proteger seu aplicativo?

Publicado em 2024-12-22
Navegar:176

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

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.

Tutorial mais recente Mais>

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