Ir para conteúdo
Fórum Script Brasil
  • 0

Invasão?


Carlos Rocha

Pergunta

Pessoal.

pode até parecer bobeira. Mas estou com duvida :

Tenhoo código:

<?
if($_GET['acao']=="listar")
{
    $data_emissao_ini=datasql($_POST['data_emissao_ini']);
    $data_emissao_final=datasql($_POST['data_emissao_final']);    
    
    $data_entrada_ini=datasql($_POST['data_entrada_ini']);
    $data_entrada_final=datasql($_POST['data_entrada_final']);
    
    $fornecedor = $_POST['fornecedor'];
    $cliente = $_POST['cliente'];
    
    if(!$busca)
    {
      if(isset($data_emissao_ini))
      {
          $busca = "WHERE notas.data_emissao between '$data_emissao_ini' and '$data_emissao_final'";
          $order = "order by notas.data_emissao";
      }
      elseif(isset($data_entrada_ini))
      {
          $busca = "WHERE notas.data_emissao between '$data_entrada_ini' and '$data_entrada_final'";
          $order = "order by notas.data_entrada";
      }
      elseif(isset($fornecedor))
      {
          $busca = "WHERE notas.id_fornecedor=$fornecedor";
          $order = "order by notas.num_nota";
      }
      elseif(isset($cliente))
      {
          $busca = "WHERE notas.id_cliente=$cliente";
          $order = "order by notas.num_nota";
      }
      else
      {
          $busca = "";
          $order = "order by notas.num_nota";
      }
    }
    else 
    { $busca=$_GET['busca']; }
...
O formulario esta disparando os field via post
<form id="pesquisas" name="pesquisas" method="post" action="?acao=listar">
Acontece, que se eu fizer:
?acao=listar&forncedor=1

via barra de endereços, mesmo o envio e recepçao estando sendo enviados e recebidos via post, enviando via barra de enderços via browser (Get) sobrepoe o post.

Como corrijo isso?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Olá Carlos,

sem o Register_Globals, para pegar os valores diretamente pelo browser, basta usar o $_REQUEST[]; Outra dica é sobre o seu form. você faz dessa forma:

<form id="pesquisas" name="pesquisas" method="post" action="?acao=listar">
Eu aconselharia a você fazer dessa forma:
<form id="pesquisas" name="pesquisas" method="post" action=".">

.....
<input type="submit" name="acao" value="listar">

</form>

Observe que eu tirei a chamada da ação e coloquei no botão...dessa forma, só será listado quando clicarem no botão e darem o request.

abs

Só mais um detalhe, retire o $_GET e coloque $_POST do seu código.

abs

Editado por MTavares
Link para o comentário
Compartilhar em outros sites

  • 0

Form

<table>
        <tr><td colspan="2">
          <?
           if ($errocli == "deslogado") { echo ("<font color=red size=-1><b>Não esta logado, favor logar no Sistema</b></font>"); }
           if ($errocli == "invalido")  { echo ("<font color=red size=-1><b>Usuário Inválido ou senha não confere</b></font>"); }
           if ($errocli == "bloqueado") { echo ("<font color=red size=-1><b>Usuário Bloqueado</b></font>"); }
          ?>
        </td></tr>
          <form action="logar.php?acao=cliente" method="post" name="login_cliente">   
          <tr>
            <td colspan="2"><font color="#990000">Cliente</font></td></tr>
                     <tr>
            <td valign="top" colspan="2">
              <table width="300">
                <tr>
                  <td width="150" valign="top">
  <input type="radio" name="pessoa" id="pessoa" value="j"  onclick="java script: abre('juridica'); fecha('fisica'); limpaCampo( 'cpf' );" />
  <label>Pessoa Jur&iacute;dica</label><br>
  <input type="radio" name="pessoa" id="pessoa" value="f"  onclick="java script: fecha('juridica'); abre('fisica'); limpaCampo( 'cnpj' );" /> 
  <label>Pessoa F&iacute;sica</label>
                  </td>
                  <td width="150" valign="top">
              <div id="juridica" style="display:block;">
              <table>
                <tr>
                  <td colspan="2" ><label>CNPJ: <br />
                        <input type="text" name="cnpj" id="cnpj" class="bginput" maxlength="18" size="19" onkeypress="return mascara(event,this,'##.###.###/####-##');" value="" /></label><br /><br />
                  </td>
                  </tr>
              </table>
              </div>
              <div id="fisica" style="display:none;">
              <table>
                <tr>
                  <td colspan="2"><label>CPF: <br />
                        <input type="text" name="cpf"  id="cpf" class="bginput" maxlength="14" size="19" onkeypress="return mascara(event,this,'###.###.###-##');"  value="" /></label><br /><br />
                  </td>
                  </tr>
              </table>
              </div>
            </td>
          </tr>
          </table>
          </td>
          </tr>
          <tr>
            <td>Senha:</td>
            <td><INPUT TYPE="password" NAME="senha" VALUE="" SIZE=20 MAXLENGTH=40></td>
          </tr>
          <tr>
            <td colspan="2" align="center">
              <input type="button" value="Entrar" onClick="CriticaLoginCliente()">
              <input type="reset"  value="Limpar"> 
            </td>
          </tr>
         </form>
        </table>
Autenticação:
<?
session_start(); 
include("global/config/conexao.php"); 
?>
<?php
//////////////////////////////////CASO DE CLIENTE LOGAR///////////////////////////////
 if ($acao=="cliente") {

    if ($pessoa=="j") {$dcto=$cnpj;$dctotipo="cnpj";$pessoatipo="razaosocial";}
    if ($pessoa=="f") {$dcto=$cpf;$dctotipo="cpf";$pessoatipo="nome";}
    
    $dcto =  str_replace( ".", "", $dcto);
    $dcto =  str_replace( "-", "", $dcto);
    $dcto =  str_replace( ".", "", $dcto);
    $dcto =  str_replace( "/", "", $dcto);
    $dcto =  str_replace( "-", "", $dcto);
    
    $senha = $_POST['senha'];
    
    $sql = $MySQL->query("select id, $pessoatipo from clientes where $dctotipo='$dcto' and senha='$senha'");
    $num = mysql_num_rows($sql);
    
    if ($num==0) {       echo "<script>document.location='index.php?errocli=invalido'</script>";    } 
    else {
          $sql = $MySQL->query("select id, bloqueio, $pessoatipo from clientes where $dctotipo='$dcto'");
          $bloqueio = mysql_result($sql,0,"bloqueio");
          
          $name = mysql_result($sql,0,$pessoatipo);
          $sessaologincli = mysql_result($sql,0,"id");
            if ($bloqueio == "s") { 
                    echo "<script>document.location='index.php?errocli=bloqueado'</script>";
                                  }
            else {
                    session_register("bloqueio");
                    session_register("name");
                    session_register("sessaologincli");
                    echo "<script>document.location='clientes'</script>";
                 }
         }
                     }
?>
Validação da sessão:
<?php
 if ($sessaologinadmin) { 
   $nome_admin = split(' ',$name); 
   echo "<font color='#FFFFFF'><H1>Administrador $nome_admin[0]!</H1></font>"; 
                      }
   else               { 
                echo "<script>document.location='../index.php?erroadmin=deslogado'</script>";                                                                                                                  }                         
   ?>

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

Troque:

session_register("bloqueio");
session_register("name");
session_register("sessaologincli");
por:
$_SESSION["bloqueio"] = $bloqueio;
$_SESSION["name"] = $name;
$_SESSION["sessaologincli"] = $sessaologincli;
o que seu botão faz com esse comando? valida os campos?
onClick="CriticaLoginCliente()"

Link para o comentário
Compartilhar em outros sites

  • 0

faz isso:

function CriticaLoginCliente()
{
   if (document.login_cliente.pessoa[0].checked)
    {    
        document.login_cliente.cpf.value="";                     
            if (document.login_cliente.cnpj.value == "")
        {
            alert("Preencha CNPJ: campo obrigatório !");
            document.login_cliente.cnpj.focus();
            return (false);
        }
           if (document.login_cliente.cnpj.value.length < 18) 
        {
            alert("CNPJ: Preencha Corretamente!");
            document.login_cliente.cnpj.focus(); 
            return (false);
        }
           if (document.login_cliente.cnpj.value == "  .   .   /    -  ") 
        {
            alert("Preencha CNPJ: Aproveite a mascara para preencher!");
            document.login_cliente.cnpj.focus(); 
            return (false);
        }
    }    
   else if (document.login_cliente.pessoa[1].checked)
    {   
         document.login_cliente.cnpj.value="";        
            if (document.login_cliente.cpf.value == "")
        {
            alert("Preencha CPF: campo obrigatório !");
            document.login_cliente.cpf.focus();
            return (false);
        }
           if (document.login_cliente.cpf.value.length < 14) 
        {
            alert("CPF: Preencha Corretamente!");
            document.login_cliente.cpf.focus(); 
            return (false);
        }
           if (document.login_cliente.cpf.value == "   .   .   -  ") 
        {
            alert("Preencha CPF: Aproveite a mascara para preencher!");
            document.login_cliente.cpf.focus(); 
            return (false);
        }
    }             
    else {
         alert("É necessário escolher uma opção\n Se Pessoa Juridica ou Física.");
                  if (document.getElementById('juridica').style.display == 'block')
                {    
                  document.login_cliente.pessoa[0].checked = true;
                  document.login_cliente.pessoa[1].checked = false;
                  document.login_cliente.cnpj.focus();
                                              
                  
                 }
                else  if (document.getElementById('fisica').style.display == 'block')
                {    
                  document.login_cliente.pessoa[0].checked = false; 
                  document.login_cliente.pessoa[1].checked = true;
                  document.login_cliente.cpf.focus();
                }
                
                return false;
        } 
         
     if (document.login_cliente.senha.value == "")
        {
            alert("Preencha Senha: Campo obrigatório!!!");
            document.login_cliente.senha.focus(); 
            return (false);
        }

document.login_cliente.submit();        
}

Link para o comentário
Compartilhar em outros sites

  • 0

Então Carlos,

eu indicaria uma mudança de validação. Por ex, colocaria as validações diretamente no PHP, existem funções que validam o CNPJ, vou disponibilizar pra você uma dessas funçoes. A outra troca seria como eu informei acima, retirar do seu action o endereço e colocar dessa forma:

Form:

<form action="." method="post" name="login_cliente">
Botão:
<input type="submit" name="Submit" value="Entrar">
e na sua autenticação:
if ($_POST["Submit"] =="Entrar") {
Dessa forma a validação só se dará quando apertar o botão, sem se preocupar em passar pela querystring os valores. Segue abaixo a função de validação do CNPJ em PHP.
$CNPJEmpresa = trim($_POST["CNPJEmpresa"]);
             
                function validaCNPJ($CNPJEmpresa){
                 $CNPJEmpresa = preg_replace ("@[./-]@", "", $CNPJEmpresa);
                   if(strlen ($CNPJEmpresa) <> 14 or !is_numeric ($CNPJEmpresa)){
                     return 0;
                   }
                 $j = 5;
                 $k = 6;
                 $soma1 = "";
                 $soma2 = "";
                
                 for ($i = 0; $i < 13; $i++){
                      $j = $j == 1 ? 9 : $j;
                      $k = $k == 1 ? 9 : $k;
                      $soma2 += ($CNPJEmpresa{$i} * $k);
                
                 if ($i < 12){ 
                     $soma1 += ($CNPJEmpresa{$i} * $j); 
                 } 
                  $k--;
                  $j--; 
                 } 
                
                $digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11;
                $digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11; 
                return (($CNPJEmpresa{12} == $digito1) and ($CNPJEmpresa{13} == $digito2));
              }

Link para o comentário
Compartilhar em outros sites

  • 0

Vou anbalisar uma vez que eu teria, para usar teu codigo, alterar bastante coisa.

Assim deu certo.

Só gostaria de saber se é seguro uma vez que se eu adicionar á url o envio por get de uma variavel, o sistema passa a mnostrar a pagia vazia (sem reultados)

Form

<form id="pesquisas" name="pesquisas" method="POST" action="">
<input type="hidden" name="acao" value="listar" />
...
Autenticação:
<?
if($_REQUEST['acao']=="listar")
{
    $data_emissao_ini=datasql($_POST['data_emissao_ini']);
    $data_emissao_final=datasql($_POST['data_emissao_final']);    
    
    $data_entrada_ini=datasql($_POST['data_entrada_ini']);
    $data_entrada_final=datasql($_POST['data_entrada_final']);
    
    $fornecedor = $_POST['fornecedor'];
    $cliente = $_POST['cliente'];
    
    if(!$busca)
    {
      if(!empty($data_emissao_ini))
      {
          $busca = "WHERE notas.data_emissao between '$data_emissao_ini' and '$data_emissao_final'";
          $order = "order by notas.data_emissao";
      }
      elseif(!empty($data_entrada_ini))
      {
          $busca = "WHERE notas.data_emissao between '$data_entrada_ini' and '$data_entrada_final'";
          $order = "order by notas.data_entrada";
      }
      elseif(!empty($fornecedor))
      {
          $busca = "WHERE notas.id_fornecedor=$fornecedor";
          $order = "order by notas.num_nota";
      }
      elseif(!empty($cliente))
      {
          $busca = "WHERE notas.id_cliente=$cliente";
          $order = "order by notas.num_nota";
      }
      else
      {
          $busca = "";
          $order = "order by notas.num_nota";
      }
    }
    else 
    { $busca=$_GET['busca']; }
...

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho usado esta daqui nos meus códigos do lado do servidor\;

<?
//Verifica CNPJ
function is_cnpj($str) { 

    if (!preg_match('|^(\d{2,3})\.?(\d{3})\.?(\d{3})\/?(\d{4})\-?(\d{2})$|', $str, $matches))
        return false;

    array_shift($matches);
    $str = implode('', $matches);

    if (strlen($str) > 14)
        $str = substr($str, 1);

    $sum1 = 0;
    $sum2 = 0;
    $sum3 = 0;
    $calc1 = 5;
    $calc2 = 6;

    for ($i=0; $i <= 12; $i++) {
        $calc1 = ($calc1 < 2) ? 9 : $calc1;
        $calc2 = ($calc2 < 2) ? 9 : $calc2;

        if ($i <= 11)
            $sum1 += $str[$i] * $calc1;

        $sum2 += $str[$i] * $calc2;
        $sum3 += $str[$i];
        $calc1--;
        $calc2--;
    }

    $sum1 %= 11;
    $sum2 %= 11;

    return ($sum3 && $str[12] == ($sum1 < 2 ? 0 : 11 - $sum1) && $str[13] == ($sum2 < 2 ? 0 : 11 - $sum2)) ? $str : false;
}
?>
Então Carlos, eu indicaria uma mudança de validação. Por ex, colocaria as validações diretamente no PHP, existem funções que validam o CNPJ, vou disponibilizar pra você uma dessas funçoes. A outra troca seria como eu informei acima, retirar do seu action o endereço e colocar dessa forma: Form:
<form action="." method="post" name="login_cliente">
Botão:
<input type="submit" name="Submit" value="Entrar">
e na sua autenticação:
if ($_POST["Submit"] =="Entrar") {
Dessa forma a validação só se dará quando apertar o botão, sem se preocupar em passar pela querystring os valores. Segue abaixo a função de validação do CNPJ em PHP.
$CNPJEmpresa = trim($_POST["CNPJEmpresa"]);
             
                function validaCNPJ($CNPJEmpresa){
                 $CNPJEmpresa = preg_replace ("@[./-]@", "", $CNPJEmpresa);
                   if(strlen ($CNPJEmpresa) <> 14 or !is_numeric ($CNPJEmpresa)){
                     return 0;
                   }
                 $j = 5;
                 $k = 6;
                 $soma1 = "";
                 $soma2 = "";
                
                 for ($i = 0; $i < 13; $i++){
                      $j = $j == 1 ? 9 : $j;
                      $k = $k == 1 ? 9 : $k;
                      $soma2 += ($CNPJEmpresa{$i} * $k);
                
                 if ($i < 12){ 
                     $soma1 += ($CNPJEmpresa{$i} * $j); 
                 } 
                  $k--;
                  $j--; 
                 } 
                
                $digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11;
                $digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11; 
                return (($CNPJEmpresa{12} == $digito1) and ($CNPJEmpresa{13} == $digito2));
              }

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...