2011-03-20 1 views
10

Je dois détecter les informations sur mon site Web. J'ai essayé la détection basée sur les modèles de comportement, et il semble être prometteur, bien que relativement lourd de calcul.La façon de détecter le grattage Web

La base consiste à collecter des horodatages de demande de certains clients et à comparer leur comportement avec un modèle commun ou un modèle précalculé.

Pour être plus précis, je collectionne des intervalles de temps entre les requêtes en tableau, indexé par fonction du temps: limite

i = (integer) ln(interval + 1)/ln(N + 1) * N + 1 
Y[i]++ 
X[i]++ for current client 

où N est le temps (nombre), des intervalles supérieurs à N sont lâchés. Initialement, X et Y sont remplis de uns. Puis, après avoir obtenu un nombre suffisant d'entre eux en X et Y, il est temps de prendre une décision. Critères est le paramètre C:

C = sqrt(summ((X[i]/norm(X) - Y[i]/norm(Y))^2)/k) 

où X représente certaines données client, Y sont des données communes, et la norme() est la fonction d'étalonnage, et k est le coefficient de normalisation, en fonction du type de norme(). Il existe 3 types:

  1. norm(X) = summ(X)/count(X), k = 2
  2. norm(X) = sqrt(summ(X[i]^2), k = 2
  3. norm(X) = max(X[i]), k is square root of number of non-empty elements X

C est dans la gamme (0..1), 0 signifie qu'il n'y a pas d'écart de comportement et une déviation est max.

L'étalonnage du type 1 est préférable pour les demandes répétées, le type 2 pour la demande répétée avec peu d'intervalles, le type 3 pour les intervalles de requêtes non constants.

Qu'en pensez-vous? J'apprécierai si vous essayerez ceci sur vos services.

+4

Juste "goûter" googlé au cas où il était un terme que je ne connaissais pas. Je suppose que vous devez vouloir dire "grattage"? –

+1

@Martin - 'screen-scraping' a été sélectionné comme tag et j'ai donc modifié cela en fonction de cela. – slugster

+1

Je dois juste dire: raclage existera toujours. À l'avenir, vous devriez au moins envisager un modèle d'entreprise adapté au 21ème siècle. – rook

Répondre

7

Pour être honnête, votre approche est complètement sans valeur parce que son contournement trivial. Un attaquant n'a même pas besoin d'écrire une ligne de code pour le contourner. Les serveurs proxy sont free et vous pouvez démarrer une nouvelle machine avec une nouvelle adresse IP sur amazon ec2 pour 2 cents de l'heure.

Une meilleure approche est Roboo qui utilise des techniques de biscuits pour déjouer des robots. La grande majorité des robots ne peuvent pas exécuter javascript ou flash, et cela peut être utilisé à votre avantage.

Cependant tout cela « (en) security though obscurity », et la seule raison pourquoi il pourrait fonctionner parce que vos données ne vaut pas une dépense de 5 minutes programmeur là-dessus. (Roboo inclus)

+4

L'objectif est de ** détecter ** racler, pas empêcher. – aks

+0

@aks Si quelqu'un sait, alors c'est trivial à contourner. Dans ce cas, ils ne le sauraient pas. – rook

+0

en utilisant des intervalles aléatoires semblerait vaincre votre approche. – gonzobrains

1

Je fais beaucoup de scrap web et j'utilise toujours plusieurs adresses IP et des intervalles aléatoires entre chaque requête. Lorsque je raccroche une page, je ne télécharge généralement que le HTML et non les dépendances (images, CSS, etc.). Vous pouvez donc essayer de vérifier si l'utilisateur télécharge ces dépendances.

+0

C'est le moyen de détection le plus simple, parmi la vérification des cookies, et il est évident à mettre en œuvre. Ici, j'essaie de deviner le raclage par anomalie dans l'activité de l'utilisateur. Cela peut entraîner une fausse alarme, de toute façon, l'utilisateur faisait quelque chose de starnge. – aks

+0

Cela peut ne pas fonctionner dans tous les cas car de nombreux navigateurs peuvent être configurés pour ne télécharger aucune dépendance à moins que l'utilisateur ne clique dessus (c'est-à-dire, bloqueurs de publicité, bloqueurs de flash, etc.). Les navigateurs de texte peuvent ne pas télécharger certaines dépendances. – gonzobrains

+0

bon point sur les navigateurs de texte – hoju

3

Si vous demandez spécifiquement à la validité de votre algorithme, ce n'est pas mauvais, mais il semble que vous êtes trop compliquer. Vous devriez utiliser les méthodologies de base déjà utilisées par WAF pour évaluer les connexions limites. Un tel algorithme qui existe déjà est l'algorithme Leaky Bucket (http://en.wikipedia.org/wiki/Leaky_bucket).

En ce qui concerne la limitation de débit pour arrêter le raclage de la bande, il existe deux failles dans la tentative de tarage des connexions limites. La première est la capacité des personnes à utiliser des réseaux proxy ou TOR pour anonymiser chaque requête. Cela annule essentiellement vos efforts. Même un logiciel de grattage comme http://www.mozenda.com utilise un énorme bloc d'adresses IP et les fait pivoter pour résoudre ce problème. L'autre problème est que vous pourriez potentiellement bloquer les gens en utilisant une adresse IP partagée. Les entreprises et les universités utilisent souvent des NAT et votre algorithme pourrait les prendre pour une seule personne.

Pour la divulgation complète, je suis un co-fondateur de Distil Networks et nous percevons souvent des trous dans la limitation de la vitesse de type WAF. Nous soulignons qu'une solution plus complète est nécessaire et donc le besoin de notre service.

Questions connexes