[SP-pm] Mojolicious Daemon e Client em JSON

Ulisses Montenegro ulisses.montenegro at gmail.com
Wed Sep 12 08:43:49 PDT 2012


Bom, novamente demonstrando minha ignorância do Mojo, mas ele não roda
sob um Apache/mod_perl? Nesse caso, não dá para filtrar isso direto no
servidor web?

Caso não rode, também dá para colocar um Apache com mod_proxy na
frente, e fazer essa restrição por lá. Em ambos os casos você ganha
uma camada de proteção extra.

O único problema é caso você precise dar manutenção nessa lista com
alguma frequência, porque aí significaria potencialmente reiniciar o
servidor web e/ou firewall a cada modificação...

[]'s

2012/9/12 Jose Nilton <jniltinho at gmail.com>:
> Eu já tenho um Firewall de entrada, posso redirecionar qualquer IP se não
> for da lista para um 403 ou 404.
>
> Acho que isso não é tão difícil.
>
>
> Exemplo:
> (https://groups.google.com/forum/?fromgroups=#!topic/mojolicious/0iiZkM4iWec)
>
> sub resource3_handler {
>         my $self = shift;
>
>         if( $self->role eq 'A' ) {
>             if( $self->method ne 'GET' ) {
>                 $self->render(status => 403);
>                 return;
>             }
>         }
>         ...
>     }
>
>     sub resource4_handler {
>         my $self = shift;
>
>         if( $self->role ne 'A' ) {
>             $self->render(status => 403);
>             return;
>         }
>
>         ...
>     }
>
>
>
> Ou esses:
> https://github.com/lammel/mojolicious-plugin-authorization
> https://github.com/byterock/mojolicious-plugin-authorization/blob/master/lib/Mojolicious/Plugin/Authorization.pm
> http://mojocasts.com/e3
>
>
> Acho que é isso, será tem como fazer uma função que é executada sempre que
> uma requisição é feita ?
>
>
> Em 12 de setembro de 2012 12:20, Daniel Mantovani
> <daniel.oliveira.mantovani at gmail.com> escreveu:
>
>> Ulisses,
>>
>> eu me enganei sobre o atributo que define o IP do usuário realmente não é
>> o host.
>> Eu não lembro exatamente agora, o 3G que eu estou usando mal me permite
>> usar o e-mail devido a lentidão.
>>
>> Mas o princípio é o mesmo,  não tem porque você transformar um prego num
>> parafuso e depois transformar o parafuso num prego. Use o firewall do OS
>> para apenas permitir acesso aos IP's determinados por você. Ou coloque um
>> sistema de autenticação na aplicação.
>>
>> []'s
>>
>>
>> --
>> "A Jedi uses the Force for knowledge and defense, never for attack." -
>> Yoda
>>
>> Software Engineer
>> Just Another Perl Hacker
>> Daniel Mantovani +5511 8538-9897
>> XOXO
>>
>> On Sep 12, 2012, at 12:11 PM, Ulisses Montenegro
>> <ulisses.montenegro at gmail.com> wrote:
>>
>> Daniel,
>>
>> Eu acredito que o cabeçalho 'Host' indica o [virtual] host ao qual a
>> requisição referencia, não? Ou seja, ele se refere ao hostname ou IP
>> do servidor, e não do cliente. Se eu entendi a dúvida original, o
>> bloqueio seria feito pelo IP do cliente.
>>
>> Em geral, endereçamento é um problema de camadas abaixo da aplicação,
>> mas nada impede que você verifique o endereço IP do socket através do
>> qual sua requisição HTTP chegou. Como fazer isso no Mojo, no entanto,
>> eu não saberia dizer. Isso não quer dizer que você não deva filtrar
>> também no firewall, porque segurança em camadas é sempre uma boa
>> prática.
>>
>> []'s
>> Ulisses
>>
>> 2012/9/12 Daniel Mantovani <daniel.oliveira.mantovani at gmail.com>:
>>
>> Você não pode bloquear IP's baseado-se no header do protocolo HTTP. Porque
>> o
>> usuário tem controle sobre esse dado.
>>
>> Freedom-for-All-Mankind:~ danielmantovani$ nc -vv -l -p 9090
>> listening on [any] 9090 ...
>> connect to [127.0.0.1] from localhost [127.0.0.1] 56262
>> GET / HTTP/1.1
>> Host: localhost:9090
>> Connection: keep-alive
>> Cache-Control: max-age=0
>> User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0)
>> AppleWebKit/537.1
>> (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
>> Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>> Accept-Encoding: gzip,deflate,sdch
>> Accept-Language: en-US,en;q=0.8
>> Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
>>
>>
>> Existe plugin para o FireFox que modifica esse atributo do header,
>> inclusive
>> é muito fácil manipular isso.
>> Uma solução para isso é usar outro layer da camada OSI.
>>
>> usuário<---->roteador<----->provedor<----->internet<----->sua_app
>>
>> Uma forma segura de bloquear determinados endereços de usar a sua
>> aplicação
>> é checar o protocolo TCP/IP diretamente. Porque o usuário não tem acesso
>> ao
>> encapsulamento do endereço de IP que o provedor fornece.
>>
>>
>> Linux ( iptables =>
>>
>> http://www.cs.colostate.edu/~cs556/projects/project-2/Exercise.html#netfilter
>> )
>> FreeBSD =>  (Packet Filter =>
>> http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html)
>>
>>
>>
>>
>> --
>> "A Jedi uses the Force for knowledge and defense, never for attack." -
>> Yoda
>>
>> Software Engineer
>> Just Another Perl Hacker
>> Daniel Mantovani +5511 8538-9897
>> XOXO
>>
>> On Sep 8, 2012, at 2:00 PM, Jose Nilton <jniltinho at gmail.com> wrote:
>>
>>
>> Boa tarde Srs,
>>
>> Estava olhando a documentação do Mojo, verifiquei que é possível  criar um
>> simples Daemon para responder em um porta http e retorno um JSON.
>>
>> Gostaria de saber se tem um forma de proteger essa aplicação para
>> determinados IPs, exemplo os ips que podem acessar essa aplicação
>> qw(192.168.0.150 10.0.0.1 200.175.200.1)
>>
>> Acho que é mais ou menos isso, mas tem executar um deny:
>>
>>  use Mojolicious::Lite;
>>
>>
>>
>> # "whois" helper
>>
>>  helper whois
>> => sub {
>>
>>
>> my $self  = shift;
>>
>>
>> my $agent = $self->req->headers->user_agent || 'Anonymous';
>>
>>
>> my $ip    = $self->tx->remote_address;
>>
>>
>> return "$agent ($ip)";
>>
>>
>> };
>>
>>
>>
>> # /secret
>>
>>  get
>> '/secret' => sub {
>>
>>
>> my $self = shift;
>>
>>
>> my $user = $self->whois;
>>
>>
>> $self->app->log->debug("Request from $user.");
>>
>>
>> };
>>
>>
>>  app
>> ->start;
>>
>>  __DATA__
>>
>>  @@ secret
>> .html.
>> ep
>>  We know who you are
>> <%= whois %>.
>>
>>
>> Tenho que criar um Server que responde em JSON e um client, ou qualquer
>> API
>> que consuma objeto em JSON, mas com segurança.
>>
>>
>> ## Alguns links que eu achei
>> http://mojolicio.us/perldoc/Mojolicious/Guides/Cookbook
>> http://search.cpan.org/~sri/Mojolicious-3.38/lib/Mojolicious/Lite.pm
>> https://metacpan.org/module/Mojolicious::Controller#METHODS
>>
>>
>> --
>>
>> ..............................................................................
>> Com Deus todas as coisas são possíveis ::: LinuxPro
>>
>> "A qualidade nunca se obtém por acaso; ela é sempre o resultado do esforço
>> inteligente." (John Ruskin)
>> "A mente que se abre a uma nova ideia jamais volta ao seu tamanho
>> original"
>> (Albert Einstein)
>>
>> =begin disclaimer
>>  Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>>
>> =begin disclaimer
>>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>>
>>
>> --
>> “If debugging is the process of removing software bugs, then
>> programming must be the process of putting them in.” - Edsger Dijkstra
>> =begin disclaimer
>>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>>
>>
>> =begin disclaimer
>>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
>> =end disclaimer
>>
>
>
>
> --
> ..............................................................................
> Com Deus todas as coisas são possíveis ::: LinuxPro
>
> "A qualidade nunca se obtém por acaso; ela é sempre o resultado do esforço
> inteligente." (John Ruskin)
> "A mente que se abre a uma nova ideia jamais volta ao seu tamanho original"
> (Albert Einstein)
>
>
> =begin disclaimer
>    Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
>  SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>



-- 
“If debugging is the process of removing software bugs, then
programming must be the process of putting them in.” - Edsger Dijkstra


More information about the SaoPaulo-pm mailing list