Posted on: February 02, 2023 06:12 PM
Posted by: Renato
Views: 492
Addslashes – Tratamento de strings com php
addslashes(string $str
): string
Retorna uma string com barras adicionadas antes de caracteres que precisam ser escapados. Estes caracteres são:
- aspas simples (
'
) - aspas duplas (
"
) - barra invertida (
\
) - NUL (o byte NUL)
Um caso de uso de addslashes() é o escape dos caracteres mencionados em uma string que deve ser avaliada pelo PHP:
<?php
$str = "O'Reilly?";
eval("echo '" . addslashes($str) . "';");
?>
Antes do PHP 5.4.0, a diretiva do PHP magic_quotes_gpc era ativada (on
) por padrão, e essencialmente executava addslashes() para todos os dados de GET, POST e COOKIE. addslashes() não deve ser usada em strings que já foram escapadas com magic_quotes_gpc, pois as strings serão escapadas duas vezes. A função get_magic_quotes_gpc() pode ser usada para verificar se magic_quotes_gpc está ligado (on
).
A função addslashes() às vezes é usada incorretamente para tentar prevenir Injeção de SQL. Em vez disso, funções de escape específicas do banco de dados e/ou instruções preparadas devem ser usadas.
A função addslashes foi por algum tempo uma solução eficaz para escapar determinados caracteres na inserção de dados em banco de dados. Descubra sua utilidade para o tratamento de strings.
Neste mês de julho, continuei com os estudos em tratamento de strings para trazer algumas funções úteis (ou não) ao desenvolvimento de sistemas. Trago então, um pouco sobre a função addslashes. A função addslashes foi por algum tempo uma solução eficaz para escapar determinados caracteres na inserção de dados em banco de dados. Com esta função era possível salvar sem problemas strings como Bacon’s Tower, sem que as aspas simples (‘) removessem a interpretação de string. Além disto, o escapamento de caracteres é importante para evitar SQL injection e assim deixar seu sistema menos vulnerável, além de permitir maior integridade aos dados..
Será que o addslashes não possui mais tanta serventia?
Com a evolução do PHP novas funções foram desenvolvidas para tratamento de dados e conexão com bancos. São exemplos disto a conexão via PDO, ou a utilização da classe MySQLi. Conectar-se ao MySQL com estas duas novas classes se tornou uma prática mais atual, segura e fácil.
Antes, o tratamento de dados para o MySQL podia ser feita desta maneira.
[code]<?php
$sub = addslashes(“minha’string”);
mysql_query(“SELECT * FROM messages WHERE subject LIKE ‘$sub%'”);
?>[/code]
Tratando com MySQLi
Voltando ao uso do addslashes, com a classe MySQLi foi criada a função mysqli::real_escape_string, que encoda a string e converte para um formato SQL escapado válido. A diferença desta para a primeira é que além de escapar os caracteres ‘, “, \, e NULL o real_escape_string escapa os caracteres \x00, \, \r e \x1a. Assim, esta função é mais eficiente ao manter a integridade de uma informação a ser gravada no banco MySQL.
O Código não muda muita coisa:
[code]<?php
$sub = addcslashes(mysql_real_escape_string(“%something_”), “%_”);
mysql_query(“SELECT * FROM messages WHERE subject LIKE ‘$sub%'”);
?>[/code]
Acima utilizei a função addcslashes para remover a possibilidade de injection em consultas com LIKE. A função ajuda o mysql_real_escape_string escapando os caracteres % e _ e garantindo integridade a consulta.
Tratando com PDO
Indo ainda mais a fundo nas conexões de banco, hoje, a maioria dos frameworks PHP como: Laravel, Simfony, Zend e etc utilizam o PDO para realizar conexões de banco. Isto porque utilzando o PDO é possível abstrair a conexão com bancos diversos e não ficar limitado apenas no MySQL.
Ok, é difícil falar de addslashes sem falar de conexões com banco de dados, já que por muito tempo sua principal função era para tratamento de dados para enviar ao banco de dados. Mas, voltemos ao tratamento da string.
Através do PDO, o ato de escapar os caracteres especiais fica abstraído no processo de preparo da query, como no exemplo abaixo.
[code]<?php
$sql = ‘SELECT name, color,
FROM candy
WHERE name like :name;’
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(‘:name’ => ‘cupcake’));
$red = $sth->fetchAll();
$sth->execute(array(‘:name’ => ‘rocambole’));
$yellow = $sth->fetchAll();
?>[/code]
Como podemos ver, neste processo não existe a necessidade de se escapar os dados antes de enviar para a query. Todo o tratamento já é feito pela extensão do PDO.
Por fim, a principal aplicação do addslashes perdeu o sentido. Lembro, porém, que para outros tipos de tratamento que necessitem de escapar dados a função ainda é válida.
Fonte:
- https://www.dialhost.com.br/blog/addslashes-tratamento-de-strings-com-php/
- https://www.php.net/manual/pt_BR/function.addslashes.php
Donate to Site
Renato
Developer