Jump to content
Fórum Script Brasil
  • 0

Invasão?


Carlos Rocha

Question

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 to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 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

Edited by MTavares
Link to comment
Share on other 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>";                                                                                                                  }                         
   ?>

Edited by Carlos Rocha
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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));
              }

Edited by Carlos Rocha
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...