Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

Anti SQL Injection

Recommended Posts

Anti SqlInjection e tags html

 

PHP


  1. function anti_injection($sql)
  2. {
  3. // remove palavras que contenham sintaxe sql
  4. $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
  5. $sql = trim($sql);//limpa espaços vazio
  6. $sql = strip_tags($sql);//tira tags html e php
  7. $sql = addslashes($sql);//Adiciona barras invertidas a uma string
  8. return $sql;
  9. }

  10. //modo de usar pegando dados vindos do formulario
  11. $nome = anti_injection($_POST["nome"]);
  12. $senha = anti_injection($_POST["senha"]);

  13. ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana... eu uso a função addslashes para esse tipo de coisa, mas vou testar a sua para ver qual é a melhor!

PHP
$variavel = addslashes($_POST["variavel"]);
Veja no manual do php sobre essa função!

Compartilhar este post


Link para o post
Compartilhar em outros sites

para escapar aspas você pode usar mysql_escape_string()

 

e sobre cookie nao porque o cookie é uma informação salva no micro do cliente

e é usado para posterior leitura dele, guardar informações e fazer logins etc...

nao tem sentido nem logica o cookie fazer uma sql injection , o sql injection é uma sintaxe sql feita no banco de dados para executar tarefas nao esperadas como listar os usuarios e senhas, apagar registros etc... resumindo o sql injection

é apenas uns comandos sql pedindo pra executar algo e se seu sistema deixar passar ele executa ,por isso previna-se contra esses ataques estude sobre sql injection e php injection

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muita gente tem certo receio sobre cookies, mas lembrando ele só pode ser lido pelo servidor onde foi criado...então não faz sentido alguem criar um cookie e faça um sql injection no seu próprio sistema...e bem interesante a o metodo do fabyo para evitar esse tipo de ataque, pena que poucos lembram desse tipo de cuidado tão simples...abraçosMarcio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana... eu uso a função addslashes para esse tipo de coisa, mas vou testar a sua para ver qual é a melhor!

E aí?qual é a melhor?Eu também só uso addslashes para evitar o sql injection, o resto também uso, mas já depende do que eu quero deixar que seja possível fazer.

PHP

[*]preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

Nunca usei foi isso, acho que com o addslashes nenhum código SQL funcionaria ou estou errado, pelo menos na minha máquina eu já experimentei e nunca deu para fazer o sql injection.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pow, essa linha 6eu naum entendi praticamente nada... uahuahuaha poderia soh dar uma explicadinha??? faloww...

Compartilhar este post


Link para o post
Compartilhar em outros sites

legal fabyo, soh uma coisinha, acho q mta gente c enrrolo com a funcao sql_regcase(), bom eu mesmo n conhecia ela :P/> , mas tipo, ela soh faz gerar o regexp pra maiusculos e minusculos, oq eu achei desnescessario nesse caso, vendo q você poderia terminar o regexp com um /i

 

o comando na minha opiniao devia ficar assim (pra simplificar):

 

<!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css">

[*]preg_replace("/<span style=' color: green;'>(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/i"</span>,"",$sql);

<!--php2--></div><!--ephp2-->

 

acho q ja facilita pra galera entende (me corrija c eu estiver errado)

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha, eu não entendo muita coisa sobre o Php e estou sofrendo com vários problemas por não ter anti sql-injection... gostaria de saber aonde inserir o script para que possa me proteger...agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fabyo, tipo, pra uso em GET e POST, eu acho q sua funcao deveria sofrer uma alteracao, vo da uma sugestao aki, depois você comenta, eu deixaria sua funcao assim:

 

<!--php1--><div class='phptop'>PHP</div><div class='phpmain'><!--ephp1--><link href = "style_images/css_php.css" rel = "stylesheet" type = "text/css">

[*]<?

[*]

[*]function anti_injection<span style=' color: green;'>($sql, $formUse = true)</span>

[*]{

[*]<span style=' color: DarkGray;'>// remove palavras que contenham sintaxe sql</span>

[*]$sql = preg_replace("/<span style=' color: green;'>(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/i"</span>,"",$sql);

[*]$sql = trim<span style=' color: green;'><span style=' color: green;'><span style=' color: green;'>($sql)</span></span></span>;<span style=' color: DarkGray;'>//limpa espaços vazio</span>

[*]$sql = strip_tags<span style=' color: green;'><span style=' color: green;'><span style=' color: green;'>($sql)</span></span></span>;<span style=' color: DarkGray;'>//tira tags html e php</span>

[*]if(!$formUse || !get_magic_quotes_gpc<span style=' color: green;'>()</span>)

[*] $sql = addslashes<span style=' color: green;'><span style=' color: green;'><span style=' color: green;'>($sql)</span></span></span>;<span style=' color: DarkGray;'>//Adiciona barras invertidas a uma string</span>

[*]return $sql;

[*]}

[*]

[*]<span style=' color: DarkGray;'>//modo de usar pegando dados vindos do formulario</span>

[*]$nome = anti_injection<span style=' color: green;'>($_POST["nome"])</span>;

[*]$senha = anti_injection<span style=' color: green;'>($_POST["senha"])</span>;

[*]

[*]?>

<!--php2--></div><!--ephp2-->

 

dessa forma, ele soh da addslashes c o magic_quotes nao estiver on, pq c estiver, você acaba espacando 2 vezes barras... e eu tb adicionei um parametro na funcao, pra dizer c ta usando em dados vindos de formulario (get, post...), q por padrao eh true, c a pessoa pode mandar esse argumento como falso para forcar o addslashes

 

posta ai oq você acho da ideia ;)/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor como eu faço pra usar este script onde?no meu site hospedado em localhost, hackers usam paginas do meu site pra entrar no banco de dados SQL e alterar deletar etc os dados o que fazer pra proteger essas paginas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu uso o htmlentities$nome = htmlentities($nome,ENT_QUOTES,'UTF-8');Ele transforma tudo o q precisar em entidades HTML, ou seja, " vira &quote; e por ae vai, para uma coisa como um Mural, ou um comentario, fica perfeito, pq a pessoa pode escrever <b> q ele vai tranformar em <b>Claro, no caso de um Login e senha, um ereg_replace() seria o melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Flybybetto nao fica bom usar esse esquema pra usar num select esse esquema se usa mais em postagens, você tem que entender sobre sql injection pra saber do que se trata , por exemplo um usuario mal intensionado pode injetar codigos maliciosos no seu banco de dados ou ate deletar ele e mesmo você usando assim nao ira impedir nada

e outra coisa usando preg_replace eh muito mais rapido que ereg_replace() e uma funçao para passar o select com mais segurança eh usar mysql_escape_string()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas porque não irá adiantar? Se os caracteres utilizados em SQLInjection serão convertidos para HTML entities?Exemplo: 1' OR 1='1-- Os seus caracteres ' = passariam a assumir o valor HTML.Pois creio que para fazer SQLInjection é necessário dos caracteres ' ; =.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra começar os caracteres nao se usa isso porque nao tem logica fazer assim

ainda mais que no um sql injection nao ta so em apostrofos a pessoa pode injetar tbm um sinal de comentario e dai o banco iria ignorar tudo e aceitar so o que passar em seguida usando essa funçao pode ate funcionar mas nao deixa de ser uma gambi o correto foi o que eu falei acima use mysql_escape_string

Escapa uma string para uso com o mysql_query.

 

Esta função irá escapar o unescaped_string, assim será seguro coloca-la na função mysql_query().

 

e nao transforma o que a pessoa digitou em HTML entities , transforma dados em HTML entities serve para exibiçao na tela do usuario em modos de postagens tipo o forum mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.