[SP-pm] Mojolicious Daemon e Client em JSON

Ulisses Montenegro ulisses.montenegro at gmail.com
Wed Sep 12 08:11:30 PDT 2012


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


More information about the SaoPaulo-pm mailing list