Pergunta

Eu construí um aplicativo que usa jQuery e JSON para consumir o serviço web ASP.NET um .asmx para executar operações CRUD. A aplicação e .asmx estão no mesmo domínio. Eu não mente pessoas que consomem as operações de leitura do .asmx remotamente, mas não quero que as pessoas apagar aleatoriamente material !!!

Eu posso dividir os métodos que eu gostaria de ser acessível ao público e os 'escondidos' em 2 de web services. Como posso bloquear chamadas para o 'serviço web hidden'.asmx para o mesmo domínio que o seu hospedado em?

Agradecemos antecipadamente.

Editar: Alguém pode comentar sobre isso, parece plausível (fonte: http: // www .slideshare.net / Simon / web-security-horror-histórias da apresentação ): Ajax pode definir cabeçalhos HTTP, formas normais não posso. Ajax pedidos devem ser do mesmo domínio.

Assim, "x solicitado-com" XMLHttpRequest "pedidos" devem ser do mesmo domínio.

Foi útil?

Solução

Há dois cenários que você precisa para proteger com serviços web:

  1. O usuário está autenticado?
  2. É a ação vindo de minha página?

A peça de autenticação já é cuidado se você estiver usando autenticação de formulários. Se o seu serviço web se senta em uma autenticação de formulários-protegidas área do site, ninguém será capaz de acessar os seus serviços web a menos que está logado.

O segundo cenário é uma história um pouco mais complicado. O ataque é conhecido como CSRF ou XSRF (Cross Site Request Forgery). Isto significa que um mal-intencionados Executa ações de sites em nome de seu usuário enquanto eles ainda estão registrados em seu site. Aqui está um grande writeup em XSRF .

Jeff Atwood espécie de resume tudo no link acima, mas aqui é a proteção XSRF em quatro etapas:

  1. Escrever um GUID ao cookie do usuário.
  2. Antes de sua chamada AJAX, leia este valor fora do cookie e adicioná-lo para o cargo de serviços web.
  3. No lado do servidor, comparar o valor formulário com o valor do cookie.
  4. Como os sites não pode ler os cookies de outro domínio, você está seguro.

Outras dicas

Em AJAX o navegador faz as chamadas, por isso mesmo se você fosse para verificar se o domínio é o mesmo que não seria o suficiente segura porque pode ser facilmente falsificado.

Você precisa usar algum tipo de authetication / autharization fichas (de preferência com um tempo limite) para manter as coisas seguras.

Rápido e solução suja seria a utilização de restrições de endereço IP para permitir o acesso de endereços IP única do seu domínio através do IIS.

Provavelmente melhor seria usar a autenticação HTTP. Há muitas maneiras de fazer isso, eu achei Autenticação no ASP.NET Web Services uma visão útil .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top