Como desativar o envio de vários formulários (POST) no IIS

7

Tivemos uma grande interrupção do SharePoint há alguns meses porque um usuário colocou o teclado em uma posição que fazia com que o botão Enter fosse pressionado indefinidamente. O usuário estava em uma página personalizada de pesquisa de pessoas e centenas de POSTs do mesmo usuário eram enviados de forma assíncrona, o que sobrecarregava o servidor.

Como trabalho em uma grande organização, estou procurando uma maneira mais global de evitar que isso aconteça.

Existe uma maneira de evitar vários envios de formulário da Web por um usuário comum dentro de um curto período de tempo no IIS?

Estou ciente de que podemos escrever javascript para desabilitar o botão após ele ser clicado, mas esperamos evitar que esse problema ocorra em outras páginas em que uma possibilidade semelhante possa existir.

Atualização : aparece olhando o código fonte, o javascript está realizando um document.location = url, sempre que o código de acesso 13 (Enter) é pressionado. Novamente, podemos escrever JS para evitar isso neste local, mas também queremos ser capazes de proteger contra esse tipo de problema mais geralmente ... preferencialmente no nível do IIS.

    
por user1209640 29.10.2012 / 17:30

3 respostas

2

Uma opção para isso seria limitar a taxa usando algo como link que pode ser definido para bloquear o IP ofensivo por um determinado período de tempo.

Você gostaria de basear as solicitações típicas / segundo / IP antes de colocar algo assim em produção, é claro, mas isso deve impedir que um único usuário seja capaz de fazer algo assim novamente.

    
por 26.11.2012 / 15:14
2

Se o problema é simplesmente evitar o impacto devido ao número de solicitações simultâneas, há um complemento para o IIS 7, Restrições de IP Dinâmico. (Esse recurso agora está embutido no IIS8). É possível configurá-lo para o modo somente de registro para determinar se algum impacto ocorreria antes de ativar o recurso.

link

  • Integração perfeita ao Gerenciador do IIS 7.0.
  • Bloqueio dinâmico de solicitações de endereço IP com base em um dos seguintes critérios:
    • O número de solicitações simultâneas.
    • O número de solicitações durante um período de tempo.
  • Suporte para a lista de IPs com permissão para ignorar a filtragem de restrição de IP dinâmico.
  • O bloqueio de solicitações pode ser configurável no nível do site ou do servidor da Web.
  • Ações de negação configuráveis permitem que os administradores de TI especifiquem qual resposta seria retornada ao cliente. O módulo suporta os códigos de status de retorno 403, 404 ou o fechamento da conexão.
  • Suporte para endereços IPv6.
  • Suporte para servidores da web por trás de um proxy ou firewall que pode modificar o endereço IP do cliente.

Váriosenviosdeformuláriodevemserabordadosnoníveldoaplicativo.Éfácildeimplementarcompáginasmestras.Aseguintejquerynapáginamestrafazotruqueparatodasaspáginasdeconteúdofilho:

$("form").submit(function () {
    $(":submit", this).attr("disabled", "disabled");
});  

Outra boa prática que pode valer a pena adotar: Postar / Redirecionar / Obter

link

    
por 29.12.2012 / 21:16
0

Você pode escrever um módulo IIS de nível global e verificar se a mesma solicitação vem do mesmo usuário em um curto período de tempo específico. então você pode decidir se o pedido de permissão continua ou não.

class CGlobalTestFilterModule:public CGlobalModule
{
public:
    GLOBAL_NOTIFICATION_STATUS 
        OnGlobalPreBeginRequest(IN IPreBeginRequestProvider * pProvider)
    {
    ...
   }
...
}

aqui é um bom guia para implementar os módulos do IIS: link você pode escolher módulos gerenciados se você estiver mais familiarizado com o .NET

    
por 07.12.2012 / 18:27