Domanda

Sto sviluppando un sito di banca immagini che conterrà immagini royalty-free per il download. Voglio rallentare chiunque utilizzi un bot o di chi sta scaricando troppo spesso, quindi ho un limite di file di tutti i giorni e hanno incorporato un sonno variabile nello script che fornisce i file. Lo faccio scrivendo il tempo di completamento dell'ultimo download per un database, quindi controllare il tempo trascorso quando inizia il prossimo download. Se questo è meno di N secondi poi ritardano il download M secondi, raddoppiando M on infrazioni successive. Che funziona bene fino a quando lo script colpisce limite di tempo di esecuzione del server.

La mia società di hosting conferma che il tempo di sonno conta verso il tempo di esecuzione.

Sono essere eccessivamente prudenti in fase di sviluppo?

Qualche suggerimento su come rilevare e rallentare gli utenti che abusano del sito senza usare il sonno php?

È stato utile?

Soluzione

Non credo che tu sia eccessivamente cauto, ma I do pensare che questo è un brutto modo di essere prudenti. Se il tempo di sonno conta verso il tempo di esecuzione, non stai pagando per questo? Probabilmente conta anche verso l'utilizzo della CPU e un sacco di altri fattori di costo troppo. Inoltre, lentamente soffocando il servizio non dare il vostro utente alcuna indicazione che stanno facendo qualcosa di sbagliato, rende solo il vostro servizio sembra lento.

Si sarebbe probabilmente meglio servire un messaggio immagine amichevole lasciando che la persona sa che cosa sta succedendo in modo che possano modificare il loro comportamento (questo è particolarmente buono dato che alcune persone potrebbero innescare per caso durante l'esecuzione di attività del tutto innocenti). Se insistono a servire il messaggio-immagine più di cinque o dieci volte, quindi è sicuramente uno script, quindi basta smettere di rispondere alle loro richieste di completamente diverso.

Altri suggerimenti

Perché non è sufficiente rendere l'utente consapevole di quello che lui / lei sta facendo "sbagliato" e visualizzare un errore?

In questo modo, l'utente potrà sapere che cosa sta succedendo e potrebbe decidere di correggere il comportamento. Con ritardi casuali, ho il sospetto qualcosa di sbagliato con il server e forse solo cercare un offerta concorrente che funziona in modo più stabile.

Utilizzare un div con un contatore di tempo e implementare questo meccanismo volta in javascript.example: (www.rapidshare.com) Se il tempo del sonno viene conteggiato come tempo di esecuzione, che significa che si ha una bella un'alta probabilità di attraversare il tempo di esecuzione limite.

Se uno ritardo è molto più lungo del timeout di esecuzione di script, si potrebbe desiderare di bloccare tale utente interamente per un certo periodo di tempo (24 ore?).

Come stai decidendo esattamente chi è aggressivo scaricando? L'indirizzo IP non è affidabile al 100%, come si potrebbe avere un certo numero di persone dietro NAT che tutti sembrano provenire dallo stesso indirizzo IP.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top