Jump to content

[Resolvido] Anti-SQL Inject para textarea com editor WYSYWYG


Recommended Posts

Posted

Pois bem tava aqui eu a trabalhar e tal, e surgiu uma duvida a nivel de segurança...

para os outros campos, get's, post's e associados estou a usar esta função:

    function anti_injection($sql, $formUse = true)
   {
   // remove palavras que contenham sintaxe sql
   $sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|like|grant|revoke|#|\*|--|\\\\)/i","",$sql);
   $sql = trim($sql);//limpa espaços vazio
   $sql = strip_tags($sql);//tira tags html e php
   if(!$formUse || !get_magic_quotes_gpc())
    $sql = addslashes($sql);//Adiciona barras invertidas a uma string
   return $sql;
   }

mas o problema é que eu estou a usar um editor visual de html (o tinymce mais precisamente), sendo assim, vai ter de passar dados html, e nao sei como fazer para tornar essa transmissao de dados segura...

ja agora esse campo que recebe os dados html, está no tipo memo, talves se usar o tipo blob seja melhor?

Aguardo opiniões

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Posted

já pensaste que se o texto processado for em inglês estás a remover palavras bastante usadas como from ou select ???

caso não gostes de PDO ou outro sistema de prepared statements, o método normal de detecção de SQL injection é a verificação da terminação da string:

exemplo:

$string = "i'am Paul";
$sql = "insert into my_table(name) values('{$string}')";
echo $sql; // insert into my_table(name) values('i'am Paul')
//                                                A
//                                                |
//                                              Erro no SQL

um exemplo de SQL injection seria:

$string = "'); drop table my_table; --";
$sql = "insert into my_table(name) values('{$string}')";
echo $sql; // insert into my_table(name) values(''); drop table my_table; --')
//                                                 A  A                     A
//                                                 |  |                     |
//                                        Fim da SQL  |                     |
//                                                    Apagar a tabela       |
//                                                                         O resto é dado como comentário

como vês, o problema é bvem complicado. e é por isso que se usa os preparred statements

conclusão : usa-os

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

sim, mas aqela funçao é para campos que nao vao levar essas palavras, ja o editor de texto pode levar provavelmente!

nao estou a usar o PDO, estou a usar Mysqli com uma classe recriada com o uso de prepared statments, mas o meu medo é ali o editor de texto, pois quanto a input's, gets e posts eu sei bem como defender de injecçoes, ja apanhei muitos sites assim, para aprendizagem didatica apenas, mas nunca tinha usado textareas para meter dados na DB, e tenho medo de certas coisas, como o inject mas tambem o xss...

btw, encontrei duas soluçoes:

http://www.tinymce.com/forum/viewtopic.php?id=28909

http://htmlpurifier.org/demo.php

qual recomendarias?

Edited by I-NOZex

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Posted

eu o 2º ja tinha passado por ele a uns tempos, mas nao sei bem como o implementar...

visto que o 1º ta nos foruns de suporte php do tinymce, acho que vou usar esse...

qualqer das formas, este editor é para uma backstage, so admins vao acedelo, mas convem obviamente, sempre garantir que está seguro.

Bem, qualqer das formas, obrigado pela tua opiniao 😉

so uma ultima qestao antes de resolver, na db o campo está como memo, achas que está bem? ou devia de ser de outro tipo? tipo blob,,,

B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net
Posted

não conheço o tipo memo, isso é MSSQL ?

acho que e' do access http://www.w3schools.com/sql/sql_datatypes.asp

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted

Se não gostas de prepared statements (n vejo a verdadeira razão) usa isto:

http://php.net/manual/en/mysqli.real-escape-string.php

Não uses o que fizeste.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. 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.