Julio Cezar 2 Postado Fevereiro 15, 2012 Denunciar Share Postado Fevereiro 15, 2012 (editado) 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> <script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script> <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> </td> <td> </td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td> </td> </tr> <tr> <td width="62"> </td> <td width="62"> </td> <td width="531"> </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"> </td> <td width="214"> </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"> </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"> </td> </tr> <tr> <td colspan="3" align="center" class="edtBOX"> </td> </tr> <tr> <td colspan="3" align="center" class="edtBOX"> </td> </tr> <tr> <td colspan="3" align="center" class="edtBOX"> </td> </tr> <tr> <td colspan="3" align="center" class="edtBOX"> </td> </tr> <tr> <td colspan="3" align="center" class="edtBOX"> </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 "<script>window.alert('ERRO. Preenchimento obrigatorio Login / Senha Obrigatorio');</script>"; echo "<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 "<script>window.alert('ERRO. Login Inativo. Favor contactar o Administrador');</script>"; echo "<script>window.location='index.php';</script>"; } if ($usuario_situacao == 9){ echo "<script>window.alert('ATENCAO. Login Bloqueado. Favor contactar o Administrador');</script>"; echo "<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 "<script>window.location='principal.php';</script>"; } else { echo "<script>window.alert('ERRO. Seu acesso ao sistema esta temporariamente bloqueado. Favor contactar o Administrador do Sistema');</script>"; echo "<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 "<script>window.alert('ERRO. Acesso não permitido');</script>"; echo "<script>window.location='index.php';</script>"; } else { $tmp=mysql_fetch_array($exe); $usuario_situacao=$tmp[enabled]; if ($usuario_situacao == "false"){ echo "<script>window.alert('ERRO. Login Inativo. Favor contactar o seu Revendedor');</script>"; echo "<script>window.location='index.php';</script>"; } else { $_SESSION['acesso_idcliente']=$tmp[id]; $_SESSION['acesso_usuario']=$tmp[name]; $_SESSION['acesso_idempresa']=$tmp[idempresa]; echo "<script>window.location='portalcliente.php';</script>"; } } } } ?> <script type="text/javascript"> var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1"); var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1"); </script> </body> </html> Editado Fevereiro 15, 2012 por Julio Cezar 2 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Fevereiro 15, 2012 Denunciar Share Postado Fevereiro 15, 2012 Use PDO. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Julio Cezar 2 Postado Fevereiro 15, 2012 Autor Denunciar Share Postado Fevereiro 15, 2012 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 "<script>window.alert('ERRO. Preenchimento obrigatorio Login / Senha Obrigatorio');</script>"; echo "<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){ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Fevereiro 15, 2012 Denunciar Share Postado Fevereiro 15, 2012 Em todas as linhas onde os dados vem de alguma coisa que o usuário informa você sofre risco de sql injection, o mais simples no caso do PHP é usar PDO, assim o próprio sistema trata isto. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Willian Gustavo Veiga Postado Fevereiro 15, 2012 Denunciar Share Postado Fevereiro 15, 2012 +1 para PDO.Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Julio Cezar 2 Postado Fevereiro 15, 2012 Autor Denunciar Share Postado Fevereiro 15, 2012 Problema que não sei como funciona, é tipico caso de 'or'1eliminando somente este problema na validação já resolveria meu problemaa questão que não sei como fazer isso com o código acima. To curtindo d++ este fórum, muito dinâmico Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jissa Postado Fevereiro 18, 2012 Denunciar Share Postado Fevereiro 18, 2012 (editado) 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 Fevereiro 18, 2012 por jissa Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Fevereiro 18, 2012 Denunciar Share Postado Fevereiro 18, 2012 Eu utilizo esta funçãofunction 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 segurosEspero ter ajudadoAbrass Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Fevereiro 18, 2012 Denunciar Share Postado Fevereiro 18, 2012 (editado) E se o meliante entrar com dropselecttable ?Ou insfromert ? Editado Fevereiro 18, 2012 por mJi Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 jissa Postado Fevereiro 19, 2012 Denunciar Share Postado Fevereiro 19, 2012 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 sqlo maximo que vai acontecer vai ser um erro de execução do script falando que é um comando inválido Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 mJi Postado Fevereiro 19, 2012 Denunciar Share Postado Fevereiro 19, 2012 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 sqlo maximo que vai acontecer vai ser um erro de execução do script falando que é um comando inválidoCorreto, 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Julio Cezar 2
Painel de controle, de um software.
Como fazer neste código para eliminar sql injection.
Editado por Julio Cezar 2Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
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.