Jump to content


Photo

Php E Sql Injetion


  • Faça o login para participar
12 replies to this topic

#1 Diego Bezerra

Diego Bezerra

    Diego Bezerra

  • Moderadores
  • 938 posts
  • Sexo:Masculino
  • Localidade:Amazonas
  • Interesses:Iniciando no C# com MSSQL.

Posted 24/06/2011, 10:38

Ola pessoa leu gostaria de saber se este codigo esta, de acordo com o anti-sql injetion

        $url 		= mysql_real_escape_string(str_replace(" ", "-", $_POST['nome']));
	$nome 		= mysql_real_escape_string($_POST['nome']);
	$desc		= mysql_real_escape_string($_POST['desc']);
	$status		= mysql_real_escape_string($_POST['status']);
	$sql_inser	= "INSERT INTO `categoria` (`url`, `nome`, `desc`, `status`) VALUES ('$url', '$nome', '$desc', '$status')";
	$ist 		= mysql_query($sql_inser) or die (mysql_error());
	if($ist){
		echo CATEGORIA_CADASTRADA;
	}else{
		echo CATEGORIA_NAO_CADASTRADA;
		}

Att.
Diego Bezerra
Agência Kernel - em Breve
Email/msn: diegobezerra@outlook.com
Facebook

#2 Leocarpo

Leocarpo

    12 Horas

  • Usuários
  • 160 posts
  • Sexo:Masculino
  • Localidade:Angola - Luanda
  • Interesses:Programação,
    Padrões web.
    Negócios.

Posted 24/06/2011, 18:20

Pelo que eu sei,está invulnerável.
O mundo é feito de teórias, as com maior
impacto é que são válidas,e aplicadas nas nossas vidas.
9033 lab

#3 shayllis

shayllis

    12 Horas

  • Usuários
  • 152 posts
  • Sexo:Masculino
  • Localidade:Barueri - SP
  • Interesses:PHP, MySQL, ASP.NET C# e VB, DreamWeaver, VisualStudio, JavaScript

Posted 27/06/2011, 13:41

Este script está de fato muito bom. Mas tem o defeito de aceitar as aspas simples, existe um bem mais simples que eu uso bastante e serve para praticamente todas as situações.
htmlspecialchars($_POST['sua_variável_post']);

Que já transforma os caracteres especiais em comandos HTML, como o espaço é transformado para &nbsp, o ' também é transformado.

#4 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/06/2011, 16:08

mysql_real_escape_string trata as aspas simples sim:

http://php.net/manua...cape-string.php

Esta é a única função necessária pra evitar sql injection. htmlspecialchars só faz o tratamento que você disse quando usada com ENT_NOQUOTES

http://php.net/manua...pecialchars.php

De qualquer modo, não é a função mais apropriada pro caso, ainda que possa ser usada pensando na recuperação dos dados depois, mas sempre em conjunto com mysql_real_escape_string.

$nome = mysql_real_escape_string(htmlspecialchars($_POST['nome']));


#5 Thiago Retondar

Thiago Retondar

    Turista

  • Usuários
  • 30 posts
  • Sexo:Masculino
  • Localidade:São Paulo

Posted 27/06/2011, 17:55

Dúvida: e porque não o strip_tags()?
<!--
Blog OGordo: http://ogordo.com //Eu só escrevo aí, mas não sou gordo. :P
Twitter: @thiagoretondar
-->

#6 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/06/2011, 18:22

Não resolve o problema das aspas, e se o objetivo for permitir html no campo, estraga tudo. SQL injection não tem a ver com html. Só com SQL.

Edição feita por: LeoB, 27/06/2011, 18:23.


#7 Thiago Retondar

Thiago Retondar

    Turista

  • Usuários
  • 30 posts
  • Sexo:Masculino
  • Localidade:São Paulo

Posted 27/06/2011, 18:35

Entendi, Leo.

É que em alguns códigos de anti-SQL Injection, eu achava o strip_tags() mas não entendia muito bem...

Em fim, obrigado!
<!--
Blog OGordo: http://ogordo.com //Eu só escrevo aí, mas não sou gordo. :P
Twitter: @thiagoretondar
-->

#8 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 27/06/2011, 20:33

Se o campo não é pra ter html, mas na hora de mandar pro banco ou recuperar de lá a pessoa não usar htmlspecialchars, tem que usar strip_tags mesmo pra ninguém escrever um <script>, por exemplo, e acabar injetando código no seu html, na hora que você for imprimir o valor. Isso não tem a ver com o sql, porque o perigo não é pro banco, é pro usuário final.

#9 shayllis

shayllis

    12 Horas

  • Usuários
  • 152 posts
  • Sexo:Masculino
  • Localidade:Barueri - SP
  • Interesses:PHP, MySQL, ASP.NET C# e VB, DreamWeaver, VisualStudio, JavaScript

Posted 29/06/2011, 16:47

Bom para falar a verdade o htmlspecialchars funciona sim com o apostrofo, ao menos em server windows, mas ele tranasforma as os sinais de maior e menor em código html também. No caso você poderia dar um replace no apostrofo, assim as tags html não desapareceriam. Mas no caso da tag script, você teria que dar um replace nele também, neste caso:
$variavel = replace("'","&#39",$_POST['nome']);
$variavel = replace("<script","&ltscript",$variavel);
Esta é a maneira mais simples :D

Bom para falar a verdade o htmlspecialchars funciona sim com o apostrofo, ao menos em server windows, mas ele tranasforma as os sinais de maior e menor em código html também. No caso você poderia dar um replace no apostrofo, assim as tags html não desapareceriam. Mas no caso da tag script, você teria que dar um replace nele também, neste caso:
$variavel = replace("'","&#39",$_POST['nome']);
$variavel = replace("<script","&ltscript",$variavel);
Esta é a maneira mais simples :D

Desculpe, confundi com o replace do javascript com o do php :D o do PHP é str_replace

#10 Diego Bezerra

Diego Bezerra

    Diego Bezerra

  • Moderadores
  • 938 posts
  • Sexo:Masculino
  • Localidade:Amazonas
  • Interesses:Iniciando no C# com MSSQL.

Posted 29/06/2011, 17:31

Ai pessoal do tou gostando do forum assim que um forum deveria ser um site de disculsão???

ai pessoal agora vou falar um pouco segundo tudo que eu ja sei, graças a internet uma das formas corretas esta aqui
http://shiflett.org/...s/sql-injection
http://www.homeandle...hp/php13p5.html

e outras formas que eu ja sei é usando um replace, pq o sql injection é uns comandos sql então da para usar, um replace para subistituir os codigos usado no sql injetion

eu abri este topico mais para pessoal que naum saiba que este exite

http://www.nyphp.org...laying-Database
Att.
Diego Bezerra
Agência Kernel - em Breve
Email/msn: diegobezerra@outlook.com
Facebook

#11 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 29/06/2011, 19:51

Bom para falar a verdade o htmlspecialchars funciona sim com o apostrofo, ao menos em server windows, mas ele tranasforma as os sinais de maior e menor em código html também. No caso você poderia dar um replace no apostrofo, assim as tags html não desapareceriam. Mas no caso da tag script, você teria que dar um replace nele também, neste caso:
$variavel = replace("'","&#39",$_POST['nome']);
$variavel = replace("<script","&ltscript",$variavel);
Esta é a maneira mais simples :D

A menos que esteja escrito na documentação, não tem essa de no windows a função é de um jeito e no linux é de outra. Meu PC é windows. Rodei o seguinte código:

<?php

echo htmlspecialchars("' \" < >");

?>

Saída:

' &quot; &lt; &gt;
Esqueçam essa coisa de replace. Pra evitar sql injection, mysql_real_escape_string basta. Remover ou não a tag <script> não importa pro SQL. Importa pro html, mas aí é outra história.

#12 Diego Bezerra

Diego Bezerra

    Diego Bezerra

  • Moderadores
  • 938 posts
  • Sexo:Masculino
  • Localidade:Amazonas
  • Interesses:Iniciando no C# com MSSQL.

Posted 01/07/2011, 10:35

è eu por escolha escolha e por ser simples, é tbm por ser mais recomendado eu uso o mysql_real_escape_string como coloquei la em cima no começo ou semelhantes
Att.
Diego Bezerra
Agência Kernel - em Breve
Email/msn: diegobezerra@outlook.com
Facebook

#13 shayllis

shayllis

    12 Horas

  • Usuários
  • 152 posts
  • Sexo:Masculino
  • Localidade:Barueri - SP
  • Interesses:PHP, MySQL, ASP.NET C# e VB, DreamWeaver, VisualStudio, JavaScript

Posted 01/07/2011, 19:52

Sim mas só dei a idéia do replace por causa do html, oras pois. Ah e o htmlspecialchars funciona de boa, aliás, qual a versão do seu PHP?




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq