Ir para conteúdo

POWERED BY:

Arquivado

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

ro.fonseca

Seguranca em PHP

Recommended Posts

Interessante esse salt,achei no inicio por simplesmente a traducao pro portugues ficar: sal, mas agora td fez sentido... hehe

so dei um exemplo

você pode montar suas formas de trabalhar, criar seus padroes...

 

 

beleza .. so uma dica .. cria uma pagina php , bota la

 

echo $_GET['s'];

 

sem protect algum , vai na URL e joga um alert .. depois bota a minha funçao e tenta da o alert ..

vou rodar jaja

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza .. so uma dica .. cria uma pagina php , bota la

 

echo $_GET['s'];

 

sem protect algum , vai na URL e joga um alert .. depois bota a minha funçao e tenta da o alert ..

 

<?php
// Acesso: url.php?s=<script>alert('oi')</script>

function protect($str)
{
   $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
   $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);
   return strtr($str, $tbl);
}

$str               = protect($_GET['s']);

echo $str;
?>

Mesmo usando htmlentities() o sis fica protegido pois a funcao removeu tambem os caracteres especiais.

 

MUITO BOM @Andrey!

 

:clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites
so dei um exemplo

você pode montar suas formas de trabalhar, criar seus padroes...

ebe

 

Pois é, eu tb já fazia isso, só que nao sabia q era uma tecnica, por exemplo, ao se mandar o id usuario via GET, eu nao mando simplesmente o id na lata, geralmente eu criptografo e associo a mais uma palavra chave.

Compartilhar este post


Link para o post
Compartilhar em outros sites

testou sem a funçao ??

 

lá vai outra DICA , quando vocês enviam ID , codigo ou algum numero INTEIRO por GET , não presisa de funçao

 

basta fazer o cast .

 

(int)$_GET['id']

 

qualquer string , sera transformada em 0 , qualquer string + numero será transoformada em 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

rodei url.php?s=<script>alert('oi')</script>

so com strip_tags e deu echo alert('oi')

sem strip_tags exibiu o alerta

 

 

 

Pois é, eu tb já fazia isso, só que nao sabia q era uma tecnica, por exemplo, ao se mandar o id usuario via GET, eu nao mando simplesmente o id na lata, geralmente eu criptografo e associo a mais uma palavra chave.

se você der um input name=id value=12, você mostra qual é a id e o tipo de campo numerico

 

mesmo que você use um campo numerico, se você criptografar em blocos, fica impossivel descobrir

 

157.635.229.752.449.302.157

você sabe qual é o ID, pq é o seu salt :)

alem de criptografado esta 'salteado'

 

 

pode parecer excesso, mas cuidado nao mata ninguem

Compartilhar este post


Link para o post
Compartilhar em outros sites

testou sem a funçao ??

 

lá vai outra DICA , quando vocês enviam ID , codigo ou algum numero INTEIRO por GET , não presisa de funçao

 

basta fazer o cast .

 

(int)$_GET['id']

 

qualquer string , sera transformada em 0 , qualquer string + numero será transoformada em 1

 

Han?? Não entendi bem, para que serve esse (int)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra transformar pra integer , .. inteiro .. evita injection .. mais ele so serve pra quando você transporta numero inteiro .. ai sim ele e a solução mais eficaz

 

 

humm, boa dica!

Compartilhar este post


Link para o post
Compartilhar em outros sites

rodei url.php?s=<script>alert('oi')</script>

so com strip_tags e deu echo alert('oi')

 

sem strip_tags exibiu o alerta

tenta botar < , > com htmlentities ..

 

seria?

<script>alert("oi")</script>

 

<script>alert("oi")<script>

com strip_tags nao retornou nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

rodei url.php?s=<script>alert('oi')</script>

so com strip_tags e deu echo alert('oi')

 

sem strip_tags exibiu o alerta

tenta botar < , > com htmlentities ..

 

seria?

<script>alert("oi")</script>

 

<script>alert("oi")<script>

com strip_tags nao retornou nada

 

Fiz assim:

 

<?php

function protect($str)
{
   //return strip_tags($str);

   $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
   $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);
   return strtr($str, $tbl);


}

$str               = protect($_GET['s']);

echo $str;
?>

<a href="url.php?s=<?php Echo htmlentities("<script>alert('oi')</script>"); ?>">Teste</a>

 

Aqui foi 100%! Muito bom!

Compartilhar este post


Link para o post
Compartilhar em outros sites

não presisa do htmlentities ali , o get_htm_trans .. já faz isso

 

então, dei

$str = protect($_GET['s']);

echo strip_tags($_GET['s']);

echo $str;

 

o unico retorno foi alert('oi') do strip_tags

a função nao retornou nada

isso depende da codificação do charset usado

Compartilhar este post


Link para o post
Compartilhar em outros sites

utf

 

<script>alert("oi")<script>

apenas com strip_tags, deveria retornar o q?

 

<script>alert("oi")<script>

com a sua função, deveria retornar o q?

nao mostraria nada?

 

 

essa funcao protection, substituiu melhor entao q a funcao analoga do php nao é isso?

você nao precisa dessa função pra verificar um campo numerico, basta usar o (int) como foi dito

 

um campo de email, você precisará ter certeza que a string contém um email valido...

 

cada caso é um caso

Compartilhar este post


Link para o post
Compartilhar em outros sites

deveria retornar o alert , utf-7 e com algumas condificações de url da problema .. e isso que minhas ers fazem ..

 

<
%3C
&lt
<
&LT
&LT;
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C

 

isso tudo ai significa < , funciona pra varios charsets e nen todos os strip_tags e eficaz , veja que na minha funçao ele e um dos ultimos a ser executado , depois que as funçoes acima fazem todo o serviço de tratamento é e convertido pra html ele limpa e libera a string

 

um alert em hex .. não sei exatamente a codificação dele mais .. uns exemplos

HEX

%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%22%74%65%73%74%65%22%29%3B%3C%2F%73%63%72%69%70%74%3E

html ascii

<script>alert("teste");</script>

DECIMAL

<script>alert("teste");</script>

base64

PHNjcmlwdD5hbGVydCgidGVzdGUiKTs8L3NjcmlwdD4=

 

a string original que eu botei nessas codificaçoes acima foi ..

<script>alert("teste");</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa funcao protection, substitui melhor entao q a funcao analoga do php nao é isso?

Eu achei muito melhor, pricipalmente pela parte do htmlentities! Susbttuirei todas minhas strip_tags por ela.

 

você nao precisa dessa função pra verificar um campo numerico, basta usar o (int) como foi dito

 

um campo de email, você precisará ter certeza que a string contém um email valido...

 

cada caso é um caso

Sim, nao precisa, mas vale lembrar que a gente espera um numero, nao quer dizer que o usuario vai lhe passar um!

 

Neste caso, na duvida prefiro usar:

 


$numero = protect($_GET['numero']);
$numero = (int)$numero;

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.