[OFF] Permitir requisições apenas do ip do servidor

1,009 views
Skip to first unread message

Marcelo Diegues

unread,
Aug 24, 2010, 3:16:26 PM8/24/10
to LISTA PHP
Pessoal, existe alguma forma de bloquear requisições que sejam feitas
com ip diferente do servidor que esta hospedado o meu sistema?


Oliver Thies

unread,
Aug 24, 2010, 3:18:12 PM8/24/10
to list...@googlegroups.com
com htaccess 
allow numero_ip


Em 24 de agosto de 2010 16:16, Marcelo Diegues <mamife...@gmail.com> escreveu:
Pessoal, existe alguma forma de bloquear requisições que sejam feitas
com ip diferente do servidor que esta hospedado o meu sistema?


--
============================================================
LEIAM SEMPRE AS REGRAS DA LISTA:
http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
--
LISTA PHP > http://groups.google.com.br/group/listaphp
--
REVISTA PHP > http://www.revistaphp.com.br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================

Marcelo Ferreira

unread,
Aug 24, 2010, 3:20:30 PM8/24/10
to list...@googlegroups.com
com isso ele simplesmente bloqueia todos os outros?

Marcelo Ferreira

unread,
Aug 24, 2010, 3:29:33 PM8/24/10
to list...@googlegroups.com
Isso nao funcionou.

O que eu quero é o seguinte: Evitar form injection.

O servidor só vai aceitar a requisição e o form veio do ip do servidor. De fora ele bloqueia, eu fiz da forma que o Oliver falou, ele deu errado.

Oliver Thies

unread,
Aug 24, 2010, 3:29:26 PM8/24/10
to list...@googlegroups.com
Dá pra fazer de várias formas.
O básicao é algo do tipo

order deny, allow
allow from ip
deny from all


Em 24 de agosto de 2010 16:20, Marcelo Ferreira <mamife...@gmail.com> escreveu:

Marcelo Ferreira

unread,
Aug 24, 2010, 3:32:42 PM8/24/10
to list...@googlegroups.com
mas se eu faço isso, qdo eu tento acessar o sistema ele bloqueia o acesso.

Eu quero bloquear requisição de forms.

Oliver Thies

unread,
Aug 24, 2010, 3:34:53 PM8/24/10
to list...@googlegroups.com
Cara,  dá uma lida sobre .htaccess, vc vai bloquear antes de chegar na aplicação.
E funciona sim, pois uso em alguns projetos.

Abs!

felipe moraes

unread,
Aug 24, 2010, 3:36:51 PM8/24/10
to list...@googlegroups.com
inicialmente

verifica se o $_SERVER['HTTP_REFERER'] é do seu site

Gilberto M O Otani

unread,
Aug 24, 2010, 3:40:27 PM8/24/10
to list...@googlegroups.com
aproveite q vai pesquisar sobre referrer e dá uma olhada em referrer
spoofing, talvez ajude a encontrar uma solução boa.

2010/8/24 felipe moraes <feli...@gmail.com>:


> inicialmente
>
> verifica se o $_SERVER['HTTP_REFERER'] é do seu site
>

> --
> ============================================================
> LEIAM SEMPRE AS REGRAS DA LISTA:
> http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
> --
> LISTA PHP > http://groups.google.com.br/group/listaphp
> --
> REVISTA PHP > http://www.revistaphp.com.br
> --
> AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
> --
> PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
> --
> DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
> ============================================================

--
Gilberto M O Otani
gilbert...@gmail.com

Marcelo Ferreira

unread,
Aug 24, 2010, 3:41:08 PM8/24/10
to list...@googlegroups.com
Se vc usa em alguns projetos, vc nao pode postar um exemplo de como bloquear forms injections via htaccess

Em 24 de agosto de 2010 16:36, felipe moraes <feli...@gmail.com> escreveu:
inicialmente

verifica se o $_SERVER['HTTP_REFERER'] é do seu site

--

Oliver Thies

unread,
Aug 24, 2010, 3:41:36 PM8/24/10
to list...@googlegroups.com
Bloquear no apache é mais seguro hehehe, nem se preocupa com a aplicação!

Oliver Thies

unread,
Aug 24, 2010, 3:42:19 PM8/24/10
to list...@googlegroups.com
Claro,
Para  isso vc pode utilizar um módulo chamado mod_security, ele está na versão 2, bloqueia muita coisa!

Abs!

Paulo Diovani

unread,
Aug 24, 2010, 3:43:51 PM8/24/10
to list...@googlegroups.com
Cara, a resposta é não.

Com .htaccess (Apache, apenas) você pode limitar os acessos.
Também pode utilizar um script php para obter o ip (REMOTE_ADDR) do array $_SERVER e mandar um header proibindo o acesso.

Mas a requisição vai existir do mesmo modo.
Se impedir as requisições mesmo, para que elas sequer cheguem ao seu servidor, só mesmo com um firewall.

__
Paulo Diovani Gonçalves
http://diovani.com

Marcelo Ferreira

unread,
Aug 24, 2010, 3:46:18 PM8/24/10
to list...@googlegroups.com
Entao é isso!!!

Eu tenho o sistema que o pessoal possa acessar de qualquer lugar, mas as requisições dos forms só podem vir do servidor que esta a aplicação, bloqueando qualquer tipo que venha de fora do ip do servidor.

Marcelo Ferreira

unread,
Aug 24, 2010, 3:48:58 PM8/24/10
to list...@googlegroups.com
E como eu faço para instalar/configurar um firewall no meu servidor? Se somente esse for o caminho.

Oliver Thies

unread,
Aug 24, 2010, 3:49:35 PM8/24/10
to list...@googlegroups.com

Com o apache a requisição não chega a executar o script.
Se estiver configurado para interpretar os .htaccess,  a cada acesso o apache olha para o diretório procurando o arquivo(.htaccess), caso exista aplica as regras na requisição.
Se há uma regra para não permitir determinados ips a requisição é interrompida e uma mensagem de acesso negado exibida para o usuário.
Reforçando, se existe uma regra para não liberar acesso por ip pelo apache, ele não acessa o script.

Abs!

Em 24 de agosto de 2010 16:43, Paulo Diovani <pa...@diovani.com> escreveu:

Gilberto M O Otani

unread,
Aug 24, 2010, 3:50:56 PM8/24/10
to list...@googlegroups.com
Existe um módulo LDAP para o Apache q talvez consiga administrar esse
tipo de coisa. Imagino q se vc criar um diretório fora do Apache e
configurar o .htaccess talvez seja possível deixar todos os seus
"action"s (.php) dos seus forms inacessíveis para outras pessoas. mas
aí parece serviço de X-men.

2010/8/24 Paulo Diovani <pa...@diovani.com>:

--

felipe moraes

unread,
Aug 24, 2010, 3:55:11 PM8/24/10
to list...@googlegroups.com
Marcelo ..

para bloquear pelo IP .. via socket .. veja o módulo de segurança falado pelo Oliver -> mod_security

já na aplicação ..

o que você pode fazer é verificar se o usuário logou/conectou no sistema antes de enviar os dados ..

daí vc vai usar a combinação SESSION e REFERER para saber se a origem dos dados é veridica ..

tem sessão ? anteriormente conectou-se no site na mesma sessão ? a página anterior é a imediatamente anterior a atual ? é minimamente seguro ..

obviamente o cara ainda pode fazer o IP Spoofing .. onde ele utiliza o IP de outro computador devidamente logado no seu site .. aí só com firewall para barrar ..

Ah .. dá para falar de um monte de tipo de ataque .. mas se esse form é tão importante que precisa de segurança .. sessão e referer dão conta do recado

Em 24 de agosto de 2010 16:46, Marcelo Ferreira <mamife...@gmail.com> escreveu:



--
http://felipebastosweb.com.br
http://twitter.com/felipebastosweb

felipe moraes

unread,
Aug 24, 2010, 4:10:33 PM8/24/10
to list...@googlegroups.com
opa ..

aproveitando .. via aplicação ..

<?php

//pagina anterior
session_start();
$_SESSION['access'] = array(
'page' => $_SERVER['PHP_SELF'].'/'.$_SERVER['REQUEST_URI'] //deve ter um erro aqui, mas não tenho como conferir
);

//pagina form
session_start();
if(!isset($_SESSION['access']) || ( $_SESSION['access']['page'] != $_SERVER['HTTP_REFERER']))
    header('Location: "http://site.com.br"');

?>

qual o grau de confiança desse código ??

não verifiquei IP [IP Spoofing] pq isso é tarefa do firewall

Paulo Diovani

unread,
Aug 24, 2010, 4:15:02 PM8/24/10
to list...@googlegroups.com
Marcelo, acho que você está confundindo as coisas.

Se você bloquear as actions de seus formulários para o endereço IP do servidor, seja qual for o método usado, o resultado será que os usuários só conseguirão enviar estes formulários quando estiverem acessando a partir do servidor. Ou seja, só será possível fornecer dados usando um navegador na mesma máquina onde a aplicação está hospedada.

Isso porque as requisições não vêm de seu formulário, mas sim da máquina do cliente que está preenchendo o formulário.


Agora, se o que você quer é evitar injection, a solução é outra.

Acho que a melhor opção é usar SSL e pagar por um certificado. Mas existem soluções mais baratas e práticas.

Uma delas seria usar SSL, e não pagar por um certificado. Assim o usuário receberá um alerta de segurança e precisará confirmar que confia no certificado utilizado, a segurança é a mesma, apenas será necessário que o usuário acredite na aplicação e confirme.

Outra opção, mais simples e fácil, é utilizar sessões autenticadas. E se o seu formulário deve permitir acesso de usuários não autenticados, então basta que inicie uma sessão também, e crie um chave (um hash), que permita a aplicação confirmar que a requisição que está gravando o formulário tem a mesma origem da que o preencheu.
Usar um captcha é a forma mais comum de fazer esta verificação, garantindo, adicionalmente, que o usuário é humano (ou pelo menos possua um bom nível de inteligência).

felipe moraes

unread,
Aug 24, 2010, 4:32:46 PM8/24/10
to list...@googlegroups.com
para melhorar ..

na página anterior poderia ter uma variavel gerada randomicamente ..

como a key falada pelo Paulo ..

index.php/blabla/blabla/key

aí na página do formulário vericaria se a key é a mesma da pagina naterior

index.php/form/blabla/key

se key1 == key2 .. ok

mas isto apenas obriga a passar pela página anterior antes ..

se a pagina anterior for um login, captcha, etc.. entra no caso citado por Paulo

rozimeire risuenho

unread,
Aug 24, 2010, 8:38:57 PM8/24/10
to list...@googlegroups.com

Boa Noite!
 
Por favor como faço para me excluir desta lista php, me cadastrei por engano.

 

De: Oliver Thies <oliverthi...@gmail.com>
Para: list...@googlegroups.com
Enviadas: Terça-feira, 24 de Agosto de 2010 16:18:12
Assunto: Re: [ PHP - Google ] [OFF] Permitir requisições apenas do ip do servidor

Diego Campos

unread,
Aug 24, 2010, 3:19:06 PM8/24/10
to list...@googlegroups.com
que tipo de requisições?

Em 24 de agosto de 2010 16:16, Marcelo Diegues <mamife...@gmail.com> escreveu:
Pessoal, existe alguma forma de bloquear requisições que sejam feitas
com ip diferente do servidor que esta hospedado o meu sistema?


Diego Campos

unread,
Aug 24, 2010, 3:43:30 PM8/24/10
to list...@googlegroups.com
se eu entendi, você quer aceitar somente um post vindo do próprio site para evitar que um usuário faça um formulário próprio para burlar suas regras do form, é isso?

basta colocar na página de destino assim:
<?
if($HTTP_REFERER=='http://www.dominio.com.br/form.php') {

conteúdo do seu script aqui

}
?>

qualquer dúvida entre em contato

Em 24 de agosto de 2010 16:36, felipe moraes <feli...@gmail.com> escreveu:
inicialmente

verifica se o $_SERVER['HTTP_REFERER'] é do seu site

--

Rubens Takiguti Ribeiro

unread,
Aug 25, 2010, 12:57:29 PM8/25/10
to list...@googlegroups.com
$_SERVER['HTTP_REFERER'] pode ser burlado pelo cliente. É algo que o navegador controla e envia para o servidor. Em alguns navegadores é possível desabilitar este mecanismo.

Rubens Takiguti Ribeiro
TecnoLivre - Cooperativa de Tecnologia e Soluções Livres
Bacharel em Ciência da Computação - UFLA
Zend Certified Engineer - PHP 5

Rubens Takiguti Ribeiro

unread,
Aug 25, 2010, 1:00:30 PM8/25/10
to list...@googlegroups.com
Sugestão: utilize um mecanismo de geração de ticket.

Você gera um ticket, coloca no formulario como campo hidden e, paralelamente, salva esse ticket em sessão. Depois é só conferir se o ticket recebido pelo formulário é igual ao gravado em sessão. A dificuldade de se burlar isso vai depender de como esse ticket é gerado e o quão difícil será interceptá-lo.


Rubens Takiguti Ribeiro
TecnoLivre - Cooperativa de Tecnologia e Soluções Livres
Bacharel em Ciência da Computação - UFLA
Zend Certified Engineer - PHP 5


Reply all
Reply to author
Forward
0 new messages