Ir para conteúdo
  • Cadastre-se

Contra ataques de SQL Injection


Posts recomendados

ELE RESOLVE MESMO!

 

APROVADO, SE ALGUÉM QUISER INSERIR OU DAR SUGESTÕES, FICA A VONTADE.

NOVO ANTI-SQL INJECTION 2013

 

 

<?php

 

/**

* Protege o banco de dados contra ataques de SQL Injection

*

* Remove palavras que podem ser ofensivas à integridade do banco

* Adiciona barras invertidas a uma string

*

* @uses $_REQUEST= _antiSqlInjection($_REQUEST);

* @uses $_POST = _antiSqlInjection($_POST);

* @uses $_GET = _antiSqlInjection($_GET);

*

* @author Igor Escobar

* @email blog [at] igorescobar [dot] com

*

*/

 

function _antiSqlInjection($Target){

$sanitizeRules = array('OR','FROM','SELECT','INSERT','DELETE','WHERE','DROP TABLE','SHOW TABLES','*','--','=');

foreach($Target as $key => $value):

if(is_array($value)): $arraSanitized[$key] = _antiSqlInjection($value);

else:

$arraSanitized[$key] = (!get_magic_quotes_gpc()) ? addslashes(str_ireplace($sanitizeRules,"",$value)) : str_ireplace($sanitizeRules,"",$value);

endif;

endforeach;

return $arraSanitized;

}

 

?>

Link para o comentário
Compartilhar em outros sites


Tá o script de chamar funções esta ai.... mas onde estão as funções? :sleep:

Quando for compartilha por favor faça de maneira correta e com todos os arquivos necessários.

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

Tá o script de chamar funções esta ai.... mas onde estão as funções? :sleep:

Quando for compartilha por favor faça de maneira correta e com todos os arquivos necessários.

 

Script de chamar função ! ? Onde voce arrumou isso ?

 

A função esta aqui:

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Quem falou que essa função é o novo method de 2013 ? Creio eu que isso seja mais antigo que o Bill gates.. Voces pode reparar que o sistema Filtra as string de acordo com a Array, e si o cara kizer colocar o login dele de "Insert", como que fica?

 

Bom, Para quem procura um Anti-inject Moderno e util, use o PDO para realizar as conexão, e de 'quebra' use a função

O conteúdo está oculto, favor efetuar login ou se cadastrar!
para filtrar os Inputs!

Editado por kinho!

Eu Apoio!

 

7GZj3.png
Link para o comentário
Compartilhar em outros sites

QUANTO A ESSE AQUI:

 

ESSE É ESTÁ COMPLETO?

 

<?php

// Metodo anti-injection

function anti_sql_inject($sql) {

 

// Remove palavras que contenham sintaxe sql

$sql = trim($sql); //limpa espaços vazio

$sql = strip_tags($sql); //tira tags html e php

$pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/";

$match = preg_match($pattern,$sql);

if($match){

echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";

exit;

}

return $sql;

}

?>

Link para o comentário
Compartilhar em outros sites

Todos errado , e uma vergonha mesmo .

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites

QUANTO A ESSE AQUI:

 

ESSE É ESTÁ COMPLETO?

 

<?php

// Metodo anti-injection

function anti_sql_inject($sql) {

 

// Remove palavras que contenham sintaxe sql

$sql = trim($sql); //limpa espaços vazio

$sql = strip_tags($sql); //tira tags html e php

$pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/";

$match = preg_match($pattern,$sql);

if($match){

echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";

exit;

}

return $sql;

}

?>

 

Amigo, acho que você ignorou oque eu dize, ou simplesmente acha que eu estou errado, esse Anti_inject esta completo sim, Olha essa linha:

 

$pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/";

 

Essa linha, contem as palavras que iram ser filtrada, ou seja a palavra que tiver aí não vai ser aceita, e si eu kizer usar a parada 'Insert" , ou ate mesmo 'show' ?

 

Você conhece PDO ? Faço a sua conexão usando o PDO, e depois usa a função

O conteúdo está oculto, favor efetuar login ou se cadastrar!
, no camos que seram passado valor para o Banco de dados, e pronto!

Eu Apoio!

 

7GZj3.png
Link para o comentário
Compartilhar em outros sites

Todos errado , e uma vergonha mesmo .

por que não faz igual o kinho! e posta a sua contribuição para ajudar o membro a saber o que fazer?

já que diz estar todos errados, tu deve saber o certo.

 

@Tópico, parabéns pela iniciativa mano!

Gosta de comédia? Veja meu canal no Youtube :D


http://bit.ly/neMON

Link para o comentário
Compartilhar em outros sites

Acho que você me entendeu mal, mas.... na postagem original eu não estava conseguindo ver as letras em verde (muito claro) que se destacaram no "[code " de sua reply.

E realmente acho que esta faltando algo ali.

Porque pelo que tenho lido é preciso criar a função e em todas as paginas chamar (/include) tal função de prevenção e ou proteção.

(não entendo php que fique claro sou amador nesta área, mas estou procurando saber mais a cada dia)

Nos exemplos citados acima e observados em suas "falhas" acho que precisamos de algo mais seguro.

Não que as contribuições não tenham seu valor.

Más é que eu principalmente sempre busco somente o melhor.

 

E quem sabe um pouco mais bem que poderia criar essa proteção para nossos sites.

Pois eu já tive o prazer (a muito tempo atrás) de ter um ótimo site, bem protegido e com funções administrativas do jogo bem interessantes.

Uma pena este material ter sido perdido bem como o investimento no mesmo que se foi no HDD queimado.

 

Um abraço e não esquenta comigo não, sou curioso mesmo!

E seria bom se mais curiosos e autodidatas viessem aparecer por este fórum cheio de bons contribuidores :wink:

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

Ao invés de postar isso faça e poste melhor antes de reclamar do trabalho alheio...

então porque não explicar? invés de comentar, perde tempo não já que não vem para explicar.

 

Em geral, o termo SQL Injection é bastante conhecido. No entanto, fazer uma função para projetos em PHP e MySQL, que evite de forma eficaz os problemas de segurança e não seja destrutiva, não é um assunto de conhecimento de todos.

Alguns programadores usam a função str_replace() para remover palavras como SELECT, DELETE, UPDATE, TRUNCATE, entre outras. No entanto, se um usuário do site, por exemplo, for falar sobre programação ou usar um desses termos em inglês ele simplesmente vai sumir do seu texto. Outra função adotada é htmlspecialchars() e htmlentities(), que aumentam o volume dos dados no banco de dados e deixam elas como HTML sendo que em outras aplicações pode ser totalmente desnecessário e não compatível o uso desses caracteres.

Também é conhecida a função addslashes(), que adiciona barras invertidas antes de aspas simples e duplas. Esta função é funcional, porém meio ultapassada e prejudica a visualização dos textos. É possível remover as barras nos dados vindos do banco com o auxílio da funcão stripslashes(), desta forma o trabalho será dobrado, pois os dados serão tratados na entrada e saída do banco sem necessidade.

Sendo assim, seguem sugestões que realmente previne sistemas contra ataques de SQL Injection sem comprometer textos ou aumentar o volume no banco de dados.

A melhor função para proteger sistemas em PHP e MySQL contra SQL Injection é a mysql_real_escape_string(), ela escapa os caracteres especiais como aspas simples e duplas antes de enviar para o banco de dados.

Também é preciso ter em mente que se a diretiva get_magic_quotes_gpc() estiver ON ele irá acrescentar barras invertidas automaticamente antes de aspas simples e duplas, o problema é que ele irá enviar para o banco de dados com as barras invertidas, comprometendo o texto. Para contornar isso basta usar a função stripslashes() para remover essas barras invertidas.

Segue exemplo da função com o nome de anti_sql_injection():

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Note que na função primeiro é verificado se a o valor informado não é numérico, ou seja, que precisa ser tratado, em seguida, se a diretiva get_magic_quotes_gpc() está ativada, se estiver usa-se a função stripslashes() conforme falado anteriormente. Logo verifique se existe a função mysql_real_escape_string(), se existir use-a, caso contrário usamos a função mysql_escape_string().

Veja um exemplo de como usar a função:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Pronto! Agora sua aplicação está protegida contra ataques de SQL Injection, e o melhor de tudo, sem destruir o conteúdo do sistema.

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites

Okay, belo exemplo e bem explicado "para quem trabalha com o php/mySQL";

E para quem é leigo e ou está aprendendo na marra! (meu caso) fica como?

 

Onde aplico isto já que tenho + de 98 paginas no meu site?

Como criar esta função e como chamar a mesma no site?

Apesar de bem explicado com termos avançados eu particularmente me perdi em sua postagem.

 

Porque você que exemplificou tão bem não postou o trabalho usando apenas um ou alguns "[spoiler [code" ???[/i]

Lembre-se que por mais que eu e muitos aqui possamos ler tutoriais...

Isto não vai nos tornar profissionais ou gabaritados à aplicar determinadas funcionalidades em nosso primeiro e ou único website em php.

 

Obs: isto não é uma critica é apenas uma observação bem detalhada de um ponto de vista pessoal.

 

E acima de mais nada!

Obrigado por compartilhar este conhecimento.

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

[spoiler [code" e para preguiçoso [/i], agora quanto ao seu site com mais de 98 pagina , no mínimo tem que ser estruturado NVC , que onde você vai escrever uma classe => e ir chamando ela por include na base e editando as variáveis de acordo com a classe eu só fiz o exemplo ...

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites

Primeiro.... :biggrin: :biggrin: :biggrin: *preguiçoso* kkkk

Agora vamos ao "X" da questão...

Eu estou com 4 funções no site

".jbs" - ".rcs" - ".clc" - ".reg" (e nenhuma delas esta na index)

E realmente não faço ideia de como implementar essa proteção "no meio da bagunça" :mellow:

Não que eu seja preguiçoso já que estou escrevendo toda biblioteca de quests de job.

Mas é que realmente não tenho mais ideia de como adicionar uma "nova" função de proteção;

Ainda mais esta que seria focada no Accont Manager dos jogadores. :(

Mesmo assim obrigado pela atenção.

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

Primeiro.... :biggrin: :biggrin: :biggrin: *preguiçoso* kkkk

Agora vamos ao "X" da questão...

Eu estou com 4 funções no site

".jbs" - ".rcs" - ".clc" - ".reg" (e nenhuma delas esta na index)

E realmente não faço ideia de como implementar essa proteção "no meio da bagunça" :mellow:

Não que eu seja preguiçoso já que estou escrevendo toda biblioteca de quests de job.

Mas é que realmente não tenho mais ideia de como adicionar uma "nova" função de proteção;

Ainda mais esta que seria focada no Accont Manager dos jogadores. :(

Mesmo assim obrigado pela atenção.

 

 

Então aprenda a a POO

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites

Então aprenda a a POO

Não!!!! Obrigado, não quero ser o "PIKA DAS GALAXIAS" kkkkk

 

Como lhe comentei eu aprendi um pouquinho com tutoriais só para fazer meu site, não sou webmaster meu querido!

Já tenho a mão em muitas áreas, e depois do 40 a memória de 64mb já não rende igual na gravação de novas informações kkkk

De boa, fica "sussa" só fis um comentário (não to pedindo nada não) mas seria interessante o pessoal ter um tutorial sobre isto.

 

Eu vou até onde conseguir e se não conseguir ai sim vou pedir ajuda ou pagar um profissional do ramo.

Boa vontade eu tenho, como comentei "não tem preguiça aqui não".

Mas todos temos um limite de quanta informação de quantas áreas podemos absorver e dominar.

 

Abração e um dia quem sabe alguém poste uma proteção simples e pratica (até para leigos).

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

Tenho várias dúvidas.

 

 

1º - Quanto a esses 2 exemplos abaixo, é só copiar e colar dentro da página?

 

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

2º - É preciso por em todas páginas do site?

 

3º - Quanto esse modelo então não funciona?

 

<?php

// Metodo anti-injection

function anti_sql_inject($sql) {

 

// Remove palavras que contenham sintaxe sql

$sql = trim($sql); //limpa espaços vazio

$sql = strip_tags($sql); //tira tags html e php

$pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/";

$match = preg_match($pattern,$sql);

if($match){

echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";

exit;

}

return $sql;

}

?>

 

Obrigado.

 

Em geral, o termo SQL Injection é bastante conhecido. No entanto, fazer uma função para projetos em PHP e MySQL, que evite de forma eficaz os problemas de segurança e não seja destrutiva, não é um assunto de conhecimento de todos.

Alguns programadores usam a função str_replace() para remover palavras como SELECT, DELETE, UPDATE, TRUNCATE, entre outras. No entanto, se um usuário do site, por exemplo, for falar sobre programação ou usar um desses termos em inglês ele simplesmente vai sumir do seu texto. Outra função adotada é htmlspecialchars() e htmlentities(), que aumentam o volume dos dados no banco de dados e deixam elas como HTML sendo que em outras aplicações pode ser totalmente desnecessário e não compatível o uso desses caracteres.

Também é conhecida a função addslashes(), que adiciona barras invertidas antes de aspas simples e duplas. Esta função é funcional, porém meio ultapassada e prejudica a visualização dos textos. É possível remover as barras nos dados vindos do banco com o auxílio da funcão stripslashes(), desta forma o trabalho será dobrado, pois os dados serão tratados na entrada e saída do banco sem necessidade.

Sendo assim, seguem sugestões que realmente previne sistemas contra ataques de SQL Injection sem comprometer textos ou aumentar o volume no banco de dados.

A melhor função para proteger sistemas em PHP e MySQL contra SQL Injection é a mysql_real_escape_string(), ela escapa os caracteres especiais como aspas simples e duplas antes de enviar para o banco de dados.

Também é preciso ter em mente que se a diretiva get_magic_quotes_gpc() estiver ON ele irá acrescentar barras invertidas automaticamente antes de aspas simples e duplas, o problema é que ele irá enviar para o banco de dados com as barras invertidas, comprometendo o texto. Para contornar isso basta usar a função stripslashes() para remover essas barras invertidas.

Segue exemplo da função com o nome de anti_sql_injection():

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Note que na função primeiro é verificado se a o valor informado não é numérico, ou seja, que precisa ser tratado, em seguida, se a diretiva get_magic_quotes_gpc() está ativada, se estiver usa-se a função stripslashes() conforme falado anteriormente. Logo verifique se existe a função mysql_real_escape_string(), se existir use-a, caso contrário usamos a função mysql_escape_string().

Veja um exemplo de como usar a função:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Pronto! Agora sua aplicação está protegida contra ataques de SQL Injection, e o melhor de tudo, sem destruir o conteúdo do sistema.

Editado por wesss
Link para o comentário
Compartilhar em outros sites

Tenho várias dúvidas.

 

 

1º - Quanto a esses 2 exemplos abaixo, é só copiar e colar dentro da página?

 

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

2º - É preciso por em todas páginas do site?

 

3º - Quanto esse modelo então não funciona?

 

<?php

// Metodo anti-injection

function anti_sql_inject($sql) {

 

// Remove palavras que contenham sintaxe sql

$sql = trim($sql); //limpa espaços vazio

$sql = strip_tags($sql); //tira tags html e php

$pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/";

$match = preg_match($pattern,$sql);

if($match){

echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";

exit;

}

return $sql;

}

?>

 

Obrigado.

 

 

Não e bem assim :) copiar e colar e funcionar

 

Tipo na primeira imagem cria um arquivo chamado por ex. funcAntiSQL.php com as função e inclui ela na pagina onde que fazer o tratamento de SQL injection e depois chama a função como no ex. na imag 2

 

 

Já o essa função ela só bloqueia as palavras e não protege em nada e perca de tempo isso e bom para fazer um mural de recado e bloquear palavrão

Editado por -GilberToxD

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites

Não!!!! Obrigado, não quero ser o "PIKA DAS GALAXIAS" kkkkk

 

Como lhe comentei eu aprendi um pouquinho com tutoriais só para fazer meu site, não sou webmaster meu querido!

Já tenho a mão em muitas áreas, e depois do 40 a memória de 64mb já não rende igual na gravação de novas informações kkkk

De boa, fica "sussa" só fis um comentário (não to pedindo nada não) mas seria interessante o pessoal ter um tutorial sobre isto.

 

Eu vou até onde conseguir e se não conseguir ai sim vou pedir ajuda ou pagar um profissional do ramo.

Boa vontade eu tenho, como comentei "não tem preguiça aqui não".

Mas todos temos um limite de quanta informação de quantas áreas podemos absorver e dominar.

 

Abração e um dia quem sabe alguém poste uma proteção simples e pratica (até para leigos).

 

 

Ai está então

O conteúdo está oculto, favor efetuar login ou se cadastrar!
e uma boa ferramenta para quem não sabe programar ela protege muito mais do que apenas um sqli , xss , rfi , etc..

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites

O conteúdo está oculto, favor efetuar login ou se cadastrar!

kkkkk neu navegador se recusa fortemente à abrir o link toda hora cai na HOME kkkkkkk

mas valeu, obrigado assim mesmo por toda sua atenção.

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

 

A funçao mysql_real_escape_string, é bem util sim, quando si trata de proteçao, ja usei bastante. Mais creio que em um sistema grande, o cara não vai usar pra sempre o MYSQL, esse é o grande problema da função, ela limita apenas ao MYSQL.

 

Por isso repito, use o PDO, é simples e rapido fazer uma conexão, caso queira mudar o DNS, basta alterar na linha do PDO exemplo:

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Basta mudar o DNS aqui: "mysql:host";

Editado por kinho!

Eu Apoio!

 

7GZj3.png
Link para o comentário
Compartilhar em outros sites

A funçao mysql_real_escape_string, é bem util sim, quando si trata de proteçao, ja usei bastante. Mais creio que em um sistema grande, o cara não vai usar pra sempre o MYSQL, esse é o grande problema da função, ela limita apenas ao MYSQL.

 

Por isso repito, use o PDO, é simples e rapido fazer uma conexão, caso queira mudar o DNS, basta alterar na linha do PDO exemplo:

 

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Basta mudar o DNS aqui: "mysql:host";

 

 

rapz , estamos falando de MySQL e não de PDO , e PDO eu acho uma bosta , meus sistema ERP Que e muito grande eu tenho que usa o Oracle , e ja to migrando todos os meus sistema para Oracle

 

 

Eu te falo uma falha não grotesca no PDO que vai te fazer migrar para o oracle :)

 

mais pdo e mais seguro que mysql e mais simples de trabalhar.

Se você está começando agora mas não sabe exatamente por onde prosseguir na L2jBrasil, talvez encontre aqui algum Tutorial Ou Dica Importante.

Participe deixando seu comentário, dúvida, sugestão, ideias, exemplos ou simplesmente dizendo um "Obrigado!" na parte de comentários do Forum, sua participação é Muito importante para o Forum e também para todos os leitores que posteriormente terão acesso aos tutoriais e matérias que oferecemos aqui.

 
Link para o comentário
Compartilhar em outros sites





×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.