Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal,
Estou com uma dúvida.
Em uma tela do meu site listo os artigos, e ao listar coloco o link para seguir para a página para visualizar o artigo ex: VisualizarArtigo.php?ART_ID=45
Mas está URL torna-se vulneravel. Por exemplo posso colocar VisualizarArtigo.php?ART_ID=<script>alert('kk');</script> que imprirá o alert.
Como que eu faço para redirecionar para a página de visualizar artigo sem passar por esta URL?
Tentei com post, gravando na sessão o ID para caso o visitante entre mais tarde. Mas ao visitante fazer o logout a sessão é destruída.
Tenta usar isso:
function madSafety($string) {
$string = stripslashes($string);
$string = strip_tags($string);
$string = mysql_real_escape_string($string);
return $string;
}
Procure usar URL's amigáveis também.
mas qual seria a solução mais aconselhável?
O que acontece ao usar está função Rafael?
Essa função evita caracteres indesejados na sua string, como alguma injeção de código.
mas no meu site posso não destruir a sessão, mas existem outros sites que podem usar sessão destroy
Oi!
mas no meu site posso não destruir a sessão, mas existem outros sites que podem usar sessão destroy
A susgestão do @Massaki foi apenas para o encerramento da sessão e é válida.
Quanto ao problema, para evitar a injeção de código, a sugestão do @Rafael Rosario é válida, eu costumo fazer isso em todo o $_GET no início do script, ex:
// XSS
function XSS( $dados = '', $removerTags = true, $htmlEntitie = false ) {
if ( is_string($dados) )
{ $rt = $dados;
if ( $removerTags ) $rt = strip_tags($dados);
if ( $htmlEntitie ) $rt = htmlentities($dados);
} else { $_arr = $dados;
foreach ($_arr as $chave => $valor) {
if ( is_array($valor) )
{ $rt[$chave] = XSS($valor, $removerTags, $htmlEntitie);
}
else { if ( $removerTags ) $valor = strip_tags($valor);
if ( $htmlEntitie ) $valor = htmlentities($valor);
$rt[$chave] = $valor;
}
}
}return $rt;
}
// Exemplo de uso:
$_GET = XSS($_GET);
Além disso, tratar vavivéis sabidamente numéricas com (int) também é uma boa alternativa, ex:
>
Para a url: seusite.com/pagina.php?idNumero=palavra
Tratamento:
$id = isSet($_GET['idNumero']) ? (int)$_GET['idNumero'] : 0;
echo $id; // imprime 0
Se surgirem mais dúvidas, poste-as.
Abraço.
é só colocar int($_GET['ART_ID']); simples e prático !
> é só colocar int($_GET['ART_ID']); simples e prático !
So pra constar, Isso não existe no PHP!! Fatal error: Call to undefined function int()
O correto [intval](http://php.net/manual/en/function.intval.php)($valor);
simples assim. nem é necessário funções mirabolantes qndo se sabe que o valor sera um inteiro.
echo (int) "<php echo 'sou um script mal =)'?>";Luis Paullo kkkkkk, eu fui equivocado confundi , Muito obrigado , esse intval é simples .
mto obrigado a todos pessoal
Duas formas:
1 - Manter como variável GET, mas testar a variável antes de usar
2 - Ao fazer logout, não destruir todas as sessões. Ao invés de session_destroy, utilize unset ($_SESSION['sua_sessao']) para todas as variáveis desejadas, menos a do ID