• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nuno_couto

Como "filtrar" os conteúdos dos formulários

4 mensagens neste tópico

Boas.

Pelo que andei a ler, é bastante aconselhável "nunca confiar" no que é colocado num formulário por parte dos utilizadores. Desde campos de pesquisa a formulários para introduzir dados na BD, há várias formas de filtrar o que é postado.

Alguem aconselha algum comando em especial?

Alguem conhece o comando real_escape_string? Será o mais aconselhado?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isso deve ser uma funcao de php certo?

pa... basicamente a forma mais facil ë impedires que te ponham html ou codigo sql nos formularios.

htmlspecialchars

htmlentities

usa PELO MENOS uma estas duas funcoes ( ver manual ) , depois ha outras medidas que se devem tomar dependendo da aplicacao.

usando o htmlspecialchars impedes que te insiram html atravez do formulario.

mas eh melhor ires dar uma olhadela ao manual.

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O real_escape_string parece muito interessante. Vejam o exemplo existente em php.net (vou colar abaixo)

<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);

// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

// This means the query sent to MySQL would be:
echo $query;
?> 

The query sent to MySQL:

SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''

This would allow anyone to log in without a valid password.

Este código seria mais correcto:

<?php
// Quote variable to make safe
function quote_smart($value)
{
   // Stripslashes
   if (get_magic_quotes_gpc()) {
       $value = stripslashes($value);
   }
   // Quote if not a number or a numeric string
   if (!is_numeric($value)) {
       $value = "'" . mysql_real_escape_string($value) . "'";
   }
   return $value;
}

// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
   OR die(mysql_error());

// Make a safe query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
           quote_smart($_POST['username']),
           quote_smart($_POST['password']));

mysql_query($query);
?> 

The query will now execute correctly, and SQL Injection attacks will not work.

Aparentemente é uma boa protecção mas nunca usei... Vou experimentar e tentar fazer alguns testes.

Alguem costuma usar este comando?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedrotuga

htmlspecialchars --  Convert special characters to HTML entities

htmlentities --  Convert all applicable characters to HTML entities

Tens a certeza da função destes comandos que falaste? Eu dei uma espreitadela ao php.net e são estas as funções mas não sei o que significa "entities". Mas acho que não tem nada a ver com a remoção dos caracteres "perigosos" para a base de dados.

Ainda não sei bem que função usar mas acho q deve ser a real_escape_string...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora