Notícias:

SMF - Just Installed!

Main Menu

Posts recentes

#91
Lista de Bugs / Re:Erro ao escapar caracteres ...
Último post por adalberto - Julho 24, 2017, 11:46:51 PM
Basicamente sim, e mais alguns.

Veja o trecho que retirei de um fórum em Inglês, já traduzido:

"A função adiciona um caractere de escape, a barra invertida, \, antes de certos caracteres potencialmente perigosos em uma seqüência de caracteres passada para a função. Esses caracteres são:  \ X00, \ n, \ r, \, ', " e \ x1a.

Isso pode ajudar a evitar ataques de injeção SQL, que geralmente são executados usando o 'caractere para adicionar código malicioso a uma consulta SQL."


https://stackoverflow.com/questions/6327679/what-does-mysql-real-escape-string-really-do

Como você deve ter notado ao escrever a sua função, não é difícil criá-la e, até mesmo, acho interessante criar a própria função em certos casos.
#92
Lista de Bugs / Re:Erro ao escapar caracteres ...
Último post por rafael - Julho 24, 2017, 08:36:46 PM
Oi Adalberto,

Percebi que esta função apenas escapa os caracteres:

\    '    e   "

é isso mesmo?
#93
Lista de Bugs / Re:Erro ao escapar caracteres ...
Último post por adalberto - Julho 22, 2017, 03:44:39 PM
É o retorno da conexão a partir da função mysql.conecte();
#94
Lista de Bugs / Re:Erro ao escapar caracteres ...
Último post por rafael - Julho 22, 2017, 02:46:29 PM
O que significa con ?
#95
Lista de Bugs / Re:Erro ao escapar caracteres ...
Último post por adalberto - Julho 22, 2017, 08:16:50 AM
Há uma função mysQL : str =  mysql.escape_string(con, str); // ou  str = con:escape_string(str);


Falou, até mais.
#96
Lista de Bugs / Re:Erro ao escapar caracteres ...
Último post por rafael - Julho 21, 2017, 11:06:54 PM
Oopa!

Acho que estava fazendo a função errada, agora deu certo!:
Fiz algumas modificações para evitar concatenação de valor nulo
então já pode passar o formulário direto pra cá.


/* Funçao para escapar caracteres especiais mysql
*  basicamente adiciona uma barra invertida
*  também serve para evitar concatenação de valor nulo
*
*  versão: 1.0
* ***********************************************/
funcao EscapeMysql(R)
se R entao
local t = R:analise([['"\;[:/+`´]-!@#$&*.,^~<>]])
se t entao
para i=1, #R inicio
se t[i] == [[']] entao t[i] = [[\']] fim
se t[i] == [["]] entao t[i] = [[\"]] fim
se t[i] == [[\]] entao t[i] = [[\\]] fim
se t[i] == [[;]] entao t[i] = [[\;]] fim
se t[i] == "]"   entao t[i] = "\\]" fim
se t[i] == "["   entao t[i] = "\\[" fim
se t[i] == [[:]] entao t[i] = [[\:]] fim
se t[i] == [[/]] entao t[i] = [[\/]] fim
se t[i] == [[+]] entao t[i] = [[\+]] fim
se t[i] == [[`]] entao t[i] = [[\`]] fim
se t[i] == [[´]] entao t[i] = [[\´]] fim
se t[i] == [[-]] entao t[i] = [[\-]] fim
se t[i] == [[!]] entao t[i] = [[\!]] fim
se t[i] == [[@]] entao t[i] = [[\@]] fim
se t[i] == [[#]] entao t[i] = [[\#]] fim
se t[i] == [[$]] entao t[i] = [[\$]] fim
se t[i] == [[&]] entao t[i] = [[\&]] fim
se t[i] == [[*]] entao t[i] = [[\*]] fim
se t[i] == [[.]] entao t[i] = [[\.]] fim
se t[i] == [[,]] entao t[i] = [[\,]] fim
se t[i] == [[^]] entao t[i] = [[\^]] fim
se t[i] == [[~]] entao t[i] = [[\~]] fim
se t[i] == [[>]] entao t[i] = [[\>]] fim
se t[i] == [[<]] entao t[i] = [[\<]] fim
se t[i] == [[?]] entao t[i] = [[\?]] fim
fim
fim
se tipo(t) == 'tabela' entao R = tabela.concat(t,"") fim
retorne R
senao retorne('""')
fim
#97
Lista de Bugs / Erro ao escapar caracteres do ...
Último post por rafael - Julho 21, 2017, 07:23:07 PM
Estou com um problema para evitar injeção no bd
Criei uma função para escapar os caracteres mas na troca dá erro


funcao EscapeMysql(R)
R = R:troque("(.*)\"(.*)","%1\\\"%2")
R = R:troque("(.*)\'(.*)","%1\\\'%2")
R = R:troque("(.*)\\(.*)","%1\\\\%2")
retorne R
fim


inserir.prisma?NomeDoPDP=%27%27
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '\'' LIMIT 1' at line 1
#98
Publique aqui / Re:Função apare, retira espaço...
Último post por rafael - Julho 20, 2017, 09:40:15 PM
A tratativa que fiz já resolveu mas segue o código:


local tab_dados = {}; //criando uma tabela vazia. (matriz) para gravar as linhas
local cont = 1;//tabelas em Prisma começam por um e nao zero.
local a = es.pabra('echo "show sessions" | nc 127.0.0.1 2001') //'a' armazena a saída do comando
se a entao
enquanto 1 inicio
local lin = a:leia()                   //lê a primeira linha de 'a'
se nao lin entao quebre fim;               //quebra o laço de repetição ao terminar as linhas.
    se string.procure(lin, '|') entao             // se a linha tiver '|' segue adiante
      local t = string.analise(lin, '|');            //cada vez que tiver um '|' a cadeia é quebrada
        se t[13]:apare()       == 'active' entao t[13] = 'ativa'       //traduzindo a saída
        senaose t[13]:apare()    == 'start'  entao t[13] = 'aberta'       //traduzindo a saída
        senaose t[13]:apare()    == 'finish' entao t[13] = 'caiu'          //traduzindo a saída
        fim
      tab_dados[cont] = {}; //cada indice de tab.. é uma nova tabela.
      tab_dados[cont].interface   = t[1] //pega o valor de t[1]
      se t[3] == '                        ' entao tab_dados[cont].usuario  = 'CONECTANDO'
      senao tab_dados[cont].usuario    = t[3]:apare() //pega o valor de t[3] caso exista
      fim
      tab_dados[cont].mac      = t[5]      //pega o valor de t[5]
      tab_dados[cont].ip      = t[7]      
      tab_dados[cont].estado      = t[13]
      tab_dados[cont].tempo      = t[15]:apare()
      
      cont = cont + 1; //incrementando para a proxima linha.
   fim //se string.procure
fim //se nao lin
  a:feche();
es.esvazie() 
senao //se a
  imprima("Erro ao ler dados")
  sis.saia(1);   
fim //se a
#99
Publique aqui / Re:Função apare, retira espaço...
Último post por adalberto - Julho 20, 2017, 02:19:09 PM
Tem como vc postar o trecho em que usa esta função?

Se preferir, use a nova função apare que desenvolvi em C, na biblioteca string (Prisma-1.0.100 ou superior);

Use: imprima( string.apare("         uma cadeia com espaços ao redor       ")  );

Testei aqui, e se tiver só espaços ela retorna toda a string sem modificá-la, fiz a correção abaixo:



//apare string (trim) string em prisma


funcao apare(str)
  str = str ou '';
  se tipo(str) <> 'string' entao
    erro("Tipo incorreto para funcao apare, espera-se uma strig");
  fim
  local strcorte = string.corte; //eficiencia rapidez por meio de var local
  local ini = 1;
  local final = #str;
  //laço para inicio da string sem espacos
  para i = 1 , #str inicio
    local letra = strcorte(str, i , i);
    se letra <> ' ' entao
       ini = i; //se chega em uma letra marca o inicio e sai do laço
       quebre; //sai do laco.
    fim
    //poe(letra);
  fim//fim para
 
  //laco para final da string excluindo espaços
  para i = #str, 1, -1 inicio //-1 decrementa do final para o começo da string
       local letra = strcorte(str, i , i);
       se letra <> ' ' entao
         final = i;
         quebre;
       fim
       //poe (letra);   
  fim
 
  //=============== CASO TUDO SEJA ESPACO:
  se ini == 1 e final == #str entao retorne ''; fim //retorna string vazia
 
 
  // agora cortando a string no tamanho exato sem os espaços ao redor.
  retorne strcorte(str , ini, final);//retornando a str pronta
fim

str = '                                  ';
//testando, a str deve sair com os <<>> colados no inicio e fim sem espaços:
imprima( '<<' .. apare(str) .. '>>' );


#100
Publique aqui / Re:Função apare, retira espaço...
Último post por rafael - Julho 20, 2017, 01:27:00 PM
Boa tarde Adalberto,

Recentemente tive um problema com essa função:

coloquei para aparar uma cadeia que só tinha espaços,
Quando eu coloquei pra concatenar ele deu concatenação de função.
Quando pedi pra mostrar o tipo ele mostrava string.
Não sei bem se isso é um erro ou uma falta de tratativa mesmo,
porque quando coloquei pra comparar se o valor era nulo antes de concatenar deu certo.