$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; }

Php E Sql Injetion
#1
Posted 24/06/2011, 10:38
#3
Posted 27/06/2011, 13:41
htmlspecialchars($_POST['sua_variável_post']);
Que já transforma os caracteres especiais em comandos HTML, como o espaço é transformado para  , o ' também é transformado.
#4
Posted 27/06/2011, 16:08
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
Posted 27/06/2011, 17:55
Blog OGordo: http://ogordo.com //Eu só escrevo aí, mas não sou gordo.

Twitter: @thiagoretondar
-->
#6
Posted 27/06/2011, 18:22
Edição feita por: LeoB, 27/06/2011, 18:23.
- Thiago Retondar likes this
#7
Posted 27/06/2011, 18:35
É 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.

Twitter: @thiagoretondar
-->
#8
Posted 27/06/2011, 20:33
#9
Posted 29/06/2011, 16:47
$variavel = replace("'","'",$_POST['nome']);
$variavel = replace("<script","<script",$variavel);
Esta é a maneira mais simples

Desculpe, confundi com o replace do javascript com o do phpBom 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("'","'",$_POST['nome']);
$variavel = replace("<script","<script",$variavel);
Esta é a maneira mais simples

#10
Posted 29/06/2011, 17:31
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
#11
Posted 29/06/2011, 19:51
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: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("'","'",$_POST['nome']);
$variavel = replace("<script","<script",$variavel);
Esta é a maneira mais simples
<?php
echo htmlspecialchars("' \" < >");
?>
Saída:
' " < >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
Posted 01/07/2011, 10:35
#13
Posted 01/07/2011, 19:52
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)