Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wallace Maxters

Segurança no método post

Recommended Posts

Não pô, os frameworks são criados por Chuck Norris, quando ele viaja para a Coreia do Norte usando uma máquina do futuro. Blasfêmia!

"CodeIgniter curtiu isso"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segurança em método post é tratado do lado do servidor, com linguagens do mesmo porte.

 

Isso que você quer é tratar, evitar erros...

 

Jamais seria inseguro se o script é pausado devido a falha e outra o cara que faz isso já está esperando um possível erro. Você acha mesmo que alguém faz invasão dessa forma? Tem que ser muito cavalo de pau ou lammer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

#hinom Tentei entender o code, mas da o seguinte erro de cara veja:

 

Parse error: syntax error, unexpected '=', expecting ')' in C:\xampp\htdocs\testes\teste.php on line 9

Compartilhar este post


Link para o post
Compartilhar em outros sites

#26,

 

estava com alguns bugs.

 

dessa vez testei aqui e consertei os mais críticos.

 

O erro da "linha 9" foi falha de digitação, esqueci do > ao atribuir o valor do array.

 

Está assim no original:

'required' = true,

Corrigido:

'required' => true,

Despois deu erro de sintaxe novamente, porque faltou a vírgula do array $fields.

 

 

<?php

// os campos com suas respectivas regras de validação.
// os índices do array $fields, são os nomes dos campos.
// pode ter mais de 10 milhões de campos que a rotina abaixo fará todo o tratamento baseado nas regras de cada campo... Sem necessidade em escrever 10 milhões de if( isset() )
// você só adiciona os campos nesse array $fields:

$fields = array(
    'foo' => array( 'validation' => 'text', 'required' => true, 'value' => null ),
    'bar' => array( 'validation' => 'int', 'required' => false, 'value' => null ),
    'bar2' => array( 'validation' => 'email', 'required' => true, 'value' => null ),
    'bar3' => array( 'validation' => 'url', 'required' => false, 'value' => null ),
);



$fields_errors = array();

$method = $_SERVER['REQUEST_METHOD'];
$parameters = $GLOBALS['_' . $method];

if( isset( $parameters ) and !empty( $parameters ) )
{
    foreach( $fields as $k => $v )
    {
        // quer dizer que esse campo é obrigatório, portanto, precisa verificar se foi enviado algo
        if( $v['required'] )
        {
            if( isset( $parameters[$k] ) )
            {
                $fields[$k]['value'] = $parameters[$k]; // recebe o valor provindo do post
                // até aqui recebeu de boa.. então prossiga com outros requisitos como filtros, validação de tamanho da string, etc..
                
                switch( $fields[$k]['validation'] )
                {
                    case 'text':
                        // normalmente não tem muito o que verificar.. texto é texto..
                    break;
                    case 'int':
                        // verifique se possui somente números inteiros.
                    break;
                }


            }else{
                $fields_errors[$k]['required'] = true; // não recebeu valor.. retornar mensagem de preenchimento obrigatório
            }
        }
    }
}

// não encontrou erros, então prossegue outros processos
if( empty( $fields_errors ) )
{
	echo 'results:' . PHP_EOL;
	print_r( $fields );
}else{
    // encontrou erros.. então prossiga tratando os erros..
	echo 'errors found: ' . PHP_EOL;
	print_r( $fields_errors );
}

?>

 

la garantia soy yo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, gente!
Dei uma ressuscitada nesse post porque encontrei uma solução que "gasta menos linhas" do que o Hinon (não desprezando a sua colaboração) e por isso desmarquei como resolvido.

É o seguinte: tendo como objetivo verificar se as variáveis vindas do post são realmente a esperada ( digo, o formulário no estado original, sem alteração de ferramentas de desenvolvedor do GOOGLE CHROME e afins), elaborei a seguinte solução:

<?php
   $requiredKeys = array('nome', 'idade', 'telefone', 'cpf');
   $_POSTKEYS = array_keys($_POST);

   sort($requiredKeys);
   sort($_POSTKEYS);

   if( $_SERVER['REQUEST_METHOD'] == 'POST' && ($requiredKeys === $_POSTKEYS)){
       echo 'todas as chaves estão corretas' . PHP_EOL;
   }

   print_r($_POSTKEYS);





Pesando na ideia acima, fiz uma função específica para isso:

<?php
  function check_postkeys($requiredKeys = array(), $ignoredKeys = array()){
       $_POSTKEYS = array_diff(array_keys($_POST),$ignoredKeys);
       sort($_POSTKEYS);
       sort($requiredKeys);
       return ($_POSTKEYS === $requiredKeys);
   }



No caso, o argumento $ignoredKeys serviria para campos que não seriam necessários verificar (como o botão que a pessoa dá o nome de "submit" e vai para variável $_POST);
Uso:

<?php
$permitidos = array('idade', 'telefone', 'cpf');

if(check_postkeys($permitidos, array('nome'))){
// checado que o post veio correto, ignorando o campo nome
}

// ou, no primeiro caso, assim:
if(check_postkeys($permitidos)){
// checado todos os campos.ok
}

 

 

Todos os testes foram realizados com o Google Chrome, através da extensão chamada PostMan (para não ter que ficar criando formulário) :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

#30.. bacaninha... mas, deixo algumas considerações

 

1. o que postei não é "a solução", conforme costumo explicitar nesse tipo de postagem...

 

2. o que postou no #30 não faz nem 1/5 da forma como postei e, tem "mais linhas"...

 

3. ter mais linhas significa:

melhor performance ?

 

 

 

rsrsrs..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.