[SP-pm] Mojolicious Daemon e Client em JSON

Jose Nilton jniltinho at gmail.com
Wed Sep 12 08:39:07 PDT 2012


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 em 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 em 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 em 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 em 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 em 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 em 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 em 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 em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
..............................................................................
*Com Deus todas as coisas são possíveis* :::
LinuxPro<http://www.linuxpro.com.br>

*"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)*
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20120912/9d378e58/attachment-0001.html>


More information about the SaoPaulo-pm mailing list