Pergunta

Eu tenho um cenário seguinte - e que eu realmente estou procurando é ajuda real de pessoas reais. Sugestões / Solutions? Por favor.

Eu tenho um site extranet para ex. www.foo.com (asp.net 3,5) Eu estou usando JQuery 1.3.2 para chamar PageMethods ValidateLogin em página default.aspx (www.foo.com/default.aspx)

O código será parecido com este

$.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            url: "Default.aspx/ValidateLogin",
            data: '{' + arg + '}',
            success: function(data) {
                if (data.d != 0) {
                    window.location = "http://www.google.com";
                } else {
                    alert("Invalid UserName/Password.");
                    ResetLoginForm();
                }
            },
            error: function(xhr, status, error) {
                var strerror = xhr.status + error;
                alert("Error Communicating with Server:" + strerror);
                ResetLoginForm();
            }
        });

O código é armazenado em arquivo js externo. Para ex default.js.

Uma vez que este site é público, qualquer um pode baixar os default.js e, portanto, pode dar uma olhada no código dado acima.

A minha pergunta é quando a pessoa recebe este URL: "Default.aspx / ValidateLogin", ele pode fazer um pedido para o servidor e servidor orgulhosamente responder ao pedido

Quais são as minhas opções aqui? como faço para validar pedido? Como faço para evitar este tipo de solicitações não autorizadas?

Foi útil?

Solução

solicitações da Web são, pela sua própria natureza, pública. Eles nem sequer precisa de olhar para o arquivo de origem. Eles poderiam simplesmente monitorar as solicitações HTTP e reproduzir esses pedidos (é muito fácil com uma ferramenta como o violinista por exemplo).

Problema com Estrangulamento

As soluções de estrangulamento não são realmente viáveis ??que eles vão reduzir a taxa de ataques. O problema é que um adversário pode escrever um script que é executado ao longo de um curso de dias. Então, novamente, ele pode usar proxies para enviar solicitações paralelas. E se você estrangular por nome de usuário que o adversário pode conseguir DoS tentando falsos logins nos nomes dos utilizadores legítimos e quando o usuário tenta reais para entrar, ele não vai saber por que ele está bloqueado.

Solução

A abordagem típica é a utilização de chaves nonce. Ele vai exigir algum trabalho extra, mas ele vai mitigar o problema e só é recomendado se você realmente antecipar um ataque de ataques ou algo assim. Uma versão simplificada deste faria o cliente passa a chave nonce como um parâmetro de consulta URI. A chave é emitido pelo servidor para o cliente em primeiro lugar. Uma vez que o pedido tenha sido feito, o servidor valida a chave existir nonce no banco de dados e permite que as solicitações. Ele imediatamente exclui a chave nonce para que o usuário não pode fazer outro pedido com a mesma chave nonce, mas, em seguida, o servidor teria de emitir chaves mais nonce para o usuário.

A solução simplificada é para permitir que apenas usuários autenticados para fazer solicitações de serviço web, mas desde que você está projetando um sistema de login isso, obviamente, não se ater.

Eu não me preocuparia com isso, a menos que você tem alguns adversários desagradáveis.

Outras dicas

Eu estou supondo que você tenha exposto o seu método de carregamento da página da sessão, então eu acho que você poderia definir uma variável de sessão quando a página é carregada e, em seguida, verificar se ela existe quando o método de página é chamado. Não é a coisa mais segura do mundo, mas ele vai ajudar.

Pessoalmente eu não iria incomodar a tentar torná-lo mais seguro -. Como já foi dito, os serviços web são inerentemente pública

Eu diria que não há nenhum problema; No entanto, você provavelmente vai querer fazer alguma Limitação de taxa para que as pessoas não podem tentar bruta forçá-lo.

Você também pode colocar um captcha após digamos 2-3 falhas de login que irá evitar de força bruta.

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