henriqueguedes 0 Denunciar post Postado Setembro 4, 2006 galera basedo nessa questao de SQl injectioneu to fazendo assim <?php // Teste 1... $_POST["usuario"] = "walace"; $_POST["senha"] = "Senha"; $_con = @mysql_connect("localhost","root",""); mysql_select_db("test",$_con); function anti_ataque($_sql) { if(get_magic_quotes_gpc()) { $_sql = stripslashes($_sql); } return mysql_real_escape_string($_sql); } echo "Teste 1...<br/>"; $_sql = "SELECT * FROM Usuario WHERE "; $_sql.= "userLogin = '" . anti_ataque($_POST["usuario"]) . "' AND "; $_sql.= "userPassw = '" . anti_ataque($_POST["senha"]) . "'"; $_res = mysql_query($_sql,$_con); if(mysql_num_rows($_res)>0) { $_r = mysql_fetch_assoc($_res); echo "Bem vindo {$_r["userName"]}"; } else { echo "Usuário ou Senha Inválido...Tente novamente"; } echo "<br/><br/>Teste 2 com o ataque...<br/>"; // Teste 2... $_POST["usuario"] = "jose_silva"; $_POST["senha"] = "' OR '1'='1"; $_sql = "SELECT * FROM Usuario WHERE "; $_sql.= "userLogin = '" . anti_ataque($_POST["usuario"]) . "' AND "; $_sql.= "userPassw = '" . anti_ataque($_POST["senha"]) . "'"; $_res = mysql_query($_sql,$_con); if(mysql_num_rows($_res)>0) { $_r = mysql_fetch_assoc($_res); echo "Bem vindo {$_r["userName"]}"; } else { echo "Usuário ou Senha Inválido...Tente novamente"; } ?>um abraçose houve falha me avise no msn baseado nos comentarios desse post kakaroto Compartilhar este post Link para o post Compartilhar em outros sites
christh87 0 Denunciar post Postado Julho 11, 2008 Olá... Não tenho muita noção de PHP, mas preciso de uma função de anti_sql_injection, pra proteger os dados que estao e que futuramente serao incluídos num banco de dados... mas necessariamente preciso usar esse tipo de função me conectando em algum servidor? ou nao? Porque estou quebrando a cabeça e nao consigo faze-la funcionar... Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Julho 16, 2008 Conectando em algum servidor ? como assim ? Compartilhar este post Link para o post Compartilhar em outros sites
aletres 0 Denunciar post Postado Março 12, 2009 Alguém testou efetivamente os scripts deste tópico? Poderíamos a partir de um script elaborar e melhora-lo até que fique perfeito... Compartilhar este post Link para o post Compartilhar em outros sites
dujapa 0 Denunciar post Postado Abril 12, 2009 Qual seria a melhor opção para utilizar num site com PHP e MSSQL? Compartilhar este post Link para o post Compartilhar em outros sites
Sérgio Mandrake 0 Denunciar post Postado Abril 24, 2009 Não sei se alguém cito isso em alguma resposta ao tópico, mas olhando essa função, uma coisa é óbvia, se alguém colocar esta função em um textarea ou algo do tipo, e o usuário digitar um texto em inglês e conter palavras como: SELECT, WHERE, FROM, o resultado vai ser apenas a destruição do texto, então acho que é bom usar com cautela, contudo, parabéns Fabyo. PS: Uma boa pratica é o uso das funções addslashes(); e stripslashes(); assim quando usar o stripslashes(); o sql injection não vai passar de strings xD e texto com aspas vai ser imprimido como devido. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Abril 27, 2009 Pessoal lembrem-se esse topico eu criei em 2005 hoje estamos em 2009, 4 anos se passaram e muita coisa mudou desde então eu ja nao uso essa função e nem recomendo ela. como ja citei antes o melhor meio de evitar sql injection, é fazer consultas sql passando os dados por referencia um exemplo: <?php /* Execute a prepared statement by binding PHP variables */ $calories = 150; $colour = 'red'; $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour'); $sth->bindParam(':calories', $calories, PDO::PARAM_INT); $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); $sth->execute(); ?> outro exemplo: <?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $city = "Amersfoort"; /* create a prepared statement */ if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { /* bind parameters for markers */ $stmt->bind_param("s", $city); /* execute query */ $stmt->execute(); /* bind result variables */ $stmt->bind_result($district); /* fetch value */ $stmt->fetch(); printf("%s is in district %s\n", $city, $district); /* close statement */ $stmt->close(); } $mysqli->close(); ?> como podem ver os dados são passados por parametro desse jeito nao tem como ser executado sql injection outras maneiras de se evitar sql injection é usar addslashes(), mysql_escape_string() nunca removam qualquer tipo de palavra de uma consulta, como ja foi falado se fosse um forum essa função ja teria problema. mas achei interessante esse assunto é muito abordado, e mesmo o topico sendo de 2005 ainda é muito discultido esse assunto, então pessoal continuem se preocupando com segurança mas tentem evitar ataques sql de uma forma correta t+ Compartilhar este post Link para o post Compartilhar em outros sites
thiagoafc 0 Denunciar post Postado Junho 22, 2009 Fabyo o que você recomendaria para quem usa SQL Server "mssql". Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Junho 22, 2009 Recomendo PDO , com ele você tera uma opção muito melhor contra ataques sql injection Compartilhar este post Link para o post Compartilhar em outros sites
thiagoafc 0 Denunciar post Postado Junho 24, 2009 Fabyo o que recomenda para SQL pois PDO para SQL Server não e bem lá estas coisas. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Junho 24, 2009 você pode usar: get_magic_quotes_gpc() addslashes() settype() sprintf() com isso você trata os dados e monta um sql passando os dados por parametros Compartilhar este post Link para o post Compartilhar em outros sites
lukoBR 0 Denunciar post Postado Setembro 21, 2009 Hum.. muitos estão dizendo pelo fórum que é questão apenas de addslashes() Mas se esquecem de Cross Site Script, Ataque DDoS e DoS, e ataques de erro de código. Eu estou fazem alguns meses tentando montar o "script perfeito" que tenha estas funções todas. Estou reunindo em um script o addslashes(), strip_tags, htmlentities() (IFs E ELSEs), e outros truques a mais =D. Testo o meu script regularmente com Programas renomados como o Acunetix, e Plugins, mas vocês acham que se eu faço de um modo eles não encontram outra vulnerabilidade? Hum... é claro que acham! Portanto, sigam um conselho de alguem iniciando em php: "Está fácil de mais? DESCONFIE!" Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Novembro 19, 2009 Citar Hum.. muitos estão dizendo pelo fórum que é questão apenas de addslashes() Mas se esquecem de Cross Site Script, Ataque DDoS e DoS, e ataques de erro de código. Eu estou fazem alguns meses tentando montar o "script perfeito" que tenha estas funções todas. Estou reunindo em um script o addslashes(), strip_tags, htmlentities() (IFs E ELSEs), e outros truques a mais =D. Testo o meu script regularmente com Programas renomados como o Acunetix, e Plugins, mas vocês acham que se eu faço de um modo eles não encontram outra vulnerabilidade? Hum... é claro que acham! Portanto, sigam um conselho de alguem iniciando em php: "Está fácil de mais? DESCONFIE!" Se está a procura ou tentando fazer o script "perfeito" vai morrer tentando rsrsrs Compartilhar este post Link para o post Compartilhar em outros sites
Allotropos 0 Denunciar post Postado Novembro 15, 2011 vejo que hoje em dia os servidores ja vem com um anti inject parece ne? coloquei um site no ar, tentei fazer um inject simples, e ele colocou uma barra na frente sozinho.. ainda eh necessario fazer isso? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 16, 2011 #54 não.. coloquei um site no ar, tentei fazer um inject simples, e ele colocou uma barra na frente sozinho.. provavelmente um server muito mal configurado ou com algum motivo específico para fazer o addslash automaticamente, pois, por padrão, as versões atuais do PHP vem desativado, se não me engano desde a versão 4.3 onde foi anunciado como "deprecated" e que seria removida futuramente. http://php.net/manual/en/security.magicquotes.php veja mais http://php.net/manual/en/security.magicquotes.disabling.php http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc http://www.php.net/manual/en/security.database.sql-injection.php Compartilhar este post Link para o post Compartilhar em outros sites
Inside 2 Denunciar post Postado Maio 2, 2013 Caros amigos, só o código abaixo é suficiente para prevenir o SQL Injection? Sou inciante. function anti_injection($txt) { $txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt; return preg_replace("@(--|\#|\*|;|=)@s", "", $txt); } Obrigado pela atenção recebida. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Maio 2, 2013 Leia Todo o tópico do início, e verá. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Inside 2 Denunciar post Postado Maio 2, 2013 Caro Alaerte, eu já li mas sou iniciante, para mim basta mas preciso da opinião de vocês que são entendidos de PHP. Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Maio 3, 2013 Certo. Hoje em dia temos ferramentas que por si só já previnem o SQL Injection, como por exemplo o uso do PDO ou MySQLi. Consiste em classes nativas que são mais seguras e previnem o ataque contra sql. Por exemplo no MySQLi temos o PREPARE que serve para "preparar" uma consulta para prevenção de ataques, leia esse artigo do amigo. http://blog.thiagobelem.net/usando-o-mysqli-orientado-a-objetos/ Bom, até aqui falamos da segurança na própria consulta, agora, em seu filtro de dados na página de login, basta você evitar que a injeção entre, deste modo a sua função já ajuda. Uma boa prática ainda, é utilizar o mysqli_real_escape_string() Entretanto, seu sistema dificilmente terá uma segurança 100% mais toda ajuda é bem vinda. Compartilhar este post Link para o post Compartilhar em outros sites
halfar 5 Denunciar post Postado Agosto 26, 2013 estou tendo o mesmo problema. Alguem vem inserindo registros sistematicamente. Ja dei uma estudada no sql Injection...mas não entendi a logica disto. Vi o seu exemplo acima, a sua funcao anti_injection, mas não entendi muito bem isto... Onde eu coloco este codigo? Mas mesmo que eu coloque este codigo no meu script que faz inserção de dados, como iria evitar a inserção de dados não autorizados. Pois pelo que andei pesquisando sobre sql Injection, seu eu tenho uma url assim: http.www.meusite.com.br/ basta ele inserir um script no final desta url, ficando assim: http.www.meusite.com.br/inserir_dados.php ai ele de alguma forma consegue inserir os dados. Então pergunto: como sua funcao anti sql funcionaria?? Eu andei testando este tipo de coisa, inventei um script para inserir dados, ou fazer alguma outra ação, e inseri este script no final da url. Mas nada aconteceu. Esperava até aparecer uma mensagem do tipo PAGINA INEXISTENTE, pois como pode executar algum script simplesmente inserindo um script no final da url, se o script não está no provedor??? to cheio de dúvidas... Compartilhar este post Link para o post Compartilhar em outros sites