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

SQL INJECTION (HELP)


Julio Cezar 2

Pergunta

Painel de controle, de um software.

Como fazer neste código para eliminar sql injection.

<?php
// ***************************************************************

// ***************************************************************
session_start();
include('conexao.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $titulo;?></title>
<link href="netplus.css" rel="stylesheet" type="text/css" />
<style type="text/css">
body {
    background-color: #EAD270;
}
</style>
&lt;script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
&lt;script src="SpryAssets/SpryTabbedPanels.js" type="text/javascript"></script>
<link href="SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
<link href="SpryAssets/SpryTabbedPanels.css" rel="stylesheet" type="text/css" />
</head>

<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="669" border="0" align="center">
  <tr>
    <td colspan="3"><img src="imagens/cinema3.jpg" width="661" height="166" /></td>
  </tr>
  <tr>
    <td colspan="3"><table width="652" border="0" align="center">
      <tr align="center" class="relatorio1">
        <td width="135" class="txtAlertaBOX">Principal</td>
        <td width="187"><a href="index_sobre.php">Sobre o Sistema</a></td>
        <td width="174"><a href="index_downloads.php">Area de Downloads</a></td>
        <td width="138"><a href="index_contato.php">Contato</a></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td width="62">&nbsp;</td>
    <td width="62">&nbsp;</td>
    <td width="531">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center"><span class="txtAlertaBOX">Acesso ao CSPADM </span><br />
      <table width="430" border="1" align="center">
      <tr>
        <td align="right"><form id="form1" name="form1" method="post" action="?acao=validar_acesso">
          <table width="339" border="0" align="center" cellpadding="2" cellspacing="2">
            <tr>
              <td width="115">&nbsp;</td>
              <td width="214">&nbsp;</td>
            </tr>
            <tr>
              <td class="txtBOX"><div align="right">Usuario:</div></td>
              <td><label for="edt_login"></label>
                <input type="text" name="edt_login" id="edt_login" /></td>
            </tr>
            <tr>
              <td class="txtBOX"><div align="right">Senha:</div></td>
              <td><label for="edt_senha"></label>
                <input type="password" name="edt_senha" id="edt_senha" /></td>
            </tr>
            <tr>
              <td class="txtBOX">&nbsp;</td>
              <td><input name="Validar" type="submit" class="txtBOX" id="Validar" value="Acessar o Sistema" /></td>
            </tr>
          </table>
        
        </form>
          <span class="edtBOX">Desenvolvido por <a href="mailto:julia@hotmail.com">JulianoSMI</a></span>
      </table></td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3" align="center" class="edtBOX">Todos os direitos Reservados.</td>
  </tr>
</table>
  <?php
    if ($acao == "validar_acesso"){
        if ($edt_login == "" || $edt_senha == ""){
            echo "&lt;script>window.alert('ERRO. Preenchimento obrigatorio Login / Senha Obrigatorio');</script>";
            echo "&lt;script>window.location='index.php';</script>";
        } else {
            $sql="select * from usuario where (login='$edt_login') and (senha='$edt_senha')";
            $exe=mysql_query($sql);
            $num=mysql_num_rows($exe);
            if ($num <=0){
                $existe_revenda=0;
            } else {
                $existe_revenda=1;
                $tmp=mysql_fetch_array($exe);
                $usuario_situacao=$tmp[situacao];
                if ($usuario_situacao == 0){
                    echo "&lt;script>window.alert('ERRO. Login Inativo. Favor contactar o Administrador');</script>";
                    echo "&lt;script>window.location='index.php';</script>";    
                }
                if ($usuario_situacao == 9){
                    echo "&lt;script>window.alert('ATENCAO. Login Bloqueado. Favor contactar o Administrador');</script>";
                    echo "&lt;script>window.location='index.php';</script>";    
                }
                if ($usuario_situacao == 1){
                    $_SESSION['acesso_idusuario']=$tmp[idusuario];
                    $_SESSION['acesso_idempresa']=$tmp[idempresa];
                    $_SESSION['acesso_admin']=$tmp[admin];
                    $_SESSION['acesso_revenda']=$tmp[revenda];
                    $idempresa=$tmp[idempresa];
                    $sql="select situacao from empresa where idempresa='$idempresa' and situacao=1";
                    $exe=mysql_query($sql);
                    $num=mysql_num_rows($exe);
                    if ($num >0){
                        echo "&lt;script>window.location='principal.php';</script>";
                    } else {
                        echo "&lt;script>window.alert('ERRO. Seu acesso ao sistema esta temporariamente bloqueado. Favor contactar o Administrador do Sistema');</script>";
                        echo "&lt;script>window.location='index.php';</script>";    
                    }
                }
            }
        }
        
        if ($existe_revenda == 0){
            $sql="select * from csp_user where (name='$edt_login') and (password='$edt_senha')";
            $exe=mysql_query($sql);
            $num=mysql_num_rows($exe);
            if ($num <=0){
                echo "&lt;script>window.alert('ERRO. Acesso não permitido');</script>";
                echo "&lt;script>window.location='index.php';</script>";
            } else {
                $tmp=mysql_fetch_array($exe);
                $usuario_situacao=$tmp[enabled];
                if ($usuario_situacao == "false"){
                    echo "&lt;script>window.alert('ERRO. Login Inativo. Favor contactar o seu Revendedor');</script>";
                    echo "&lt;script>window.location='index.php';</script>";    
                } else {
                    $_SESSION['acesso_idcliente']=$tmp[id];
                    $_SESSION['acesso_usuario']=$tmp[name];
                    $_SESSION['acesso_idempresa']=$tmp[idempresa];
                    echo "&lt;script>window.location='portalcliente.php';</script>";
                }
            }
        }
    }
?>

&lt;script type="text/javascript">
var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1");
var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1");
</script>
</body>
</html>

Editado por Julio Cezar 2
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

na verdade entendo pouco muito pouco de PHP, por isso estou pedindo ajuda ate onde pesquisei é esta linha q esta deixando vulnerável:

if ($acao == "validar_acesso"){
        if ($edt_login == "" || $edt_senha == ""){
            echo "&lt;script>window.alert('ERRO. Preenchimento obrigatorio Login / Senha Obrigatorio');</script>";
            echo "&lt;script>window.location='index.php';</script>";
        } else {
            $sql="select * from usuario where (login='$edt_login') and (senha='$edt_senha')";
            $exe=mysql_query($sql);
            $num=mysql_num_rows($exe);
            if ($num <=0){

Link para o comentário
Compartilhar em outros sites

  • 0

uma forma bem facil..

crie uma função:

function sql_injection( $s )

{

$s = str_replace("\'","",$s);

$s = str_replace("'","",$s);

$s = str_replace("'or","",$s);

$s = str_replace("'or'","",$s);

$s = str_replace("or'","",$s);

$s = str_replace("=","",$s);

$s = str_replace("Select","",$s);

$s = str_replace("select","",$s);

$s = str_replace("order by","",$s);

return $s;

}

só ir adicionando linhas , se quiser proibir que seja enviado a palavra script para evitar que seja enviado um javascript para as variaveis só colocar

$s = str_replace("script","",$s);

para usar só colocar nas variaveis que receber para checar

$var = sql_injection($_POST["valor"]);

já vai remover o que estiver na função trocando para espaço em branco

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

  • 0

Eu utilizo esta função

function anti_injection($injection) {
        if (is_array($injection)) {
            foreach ($injection as $i => $inj) {
                $injection[$i] = anti_injection_string($inj);
            }
            return $injection;
        } else {
            if(!is_null($injection)) {
                $injection = htmlspecialchars(preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $injection), ENT_QUOTES);
            }
            if (is_numeric($injection)) {
                if (intval($injection) == $injection) {
                    $injection = intval($injection);
                } else {
                    $injection = floatval($injection);
                } 
            }
            return $injection;
        }
    }
se utiliza desse jeito
$string = anti_injection($string);
// voltará uma string/int/float segura
// OU
$array = array($string1, $string2, $string3);
$array = anti_injection($array);
// voltará uma matriz com string/int/float seguros

Espero ter ajudado

Abrass

Link para o comentário
Compartilhar em outros sites

  • 0
E se o meliante entrar com

dropselecttable ?

Ou

insfromert ?

acredito que não faça nada, são comandos não serão reconhecidos pelos comados sql

o maximo que vai acontecer vai ser um erro de execução do script falando que é um comando inválido

Link para o comentário
Compartilhar em outros sites

  • 0
E se o meliante entrar com

dropselecttable ?

Ou

insfromert ?

acredito que não faça nada, são comandos não serão reconhecidos pelos comados sql

o maximo que vai acontecer vai ser um erro de execução do script falando que é um comando inválido

Correto, mas as funções acima sugeridas iriam retirar a parte em não-negrito dos comandos, e o que iria sobrar seriam comandos válidos.

A solução seria implementar um método recursivo que verifique a string até não encontrar comandos SQL.

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...