3 minutes
Protéger votre site internet/ web app du scraping
Si vous avez besoin de protéger vos précieuses données, sécuriser votre API ne suffit pas. Il faut aussi protéger votre front du scraping sans quoi un hacker peut récupérer toutes vos données. Pour un hacker, c’est un peu plus long qu’attaquer une API mais pour une personne expérimentée, cela peut aller très vite. Dans cet article succinct, nous allons voir brièvement des techniques utilisées pour scraper des données. Il est important de les connaître pour mieux protéger son site internet. Il est abérrant de voir que certains business lancés sur internet n’ont absolument rien fait pour se protéger. Pourtant si un dump de leurs données se retrouvait sur internet ils pourraient tout de suite fermer boutique…
Filtrage IP
Possibilité de passer sous le radar des API gateway avec des nouvelles IPs.
Proxy Anonyme via Tor
Avantage: Rapidité de mise en oeuvre
Inconvénient: Range d’IPs connu
Example d’usage sur OSX avec Python 3:
pip insall requests
brew install tor
tor
ou
brew services start tor
Dans un programme Python:
import requests
proxies = {
'http': 'socks5://127.0.0.1:9050',
'https': 'socks5://127.0.0.1:9050'
}
req = requests.Session()
url = ""
req.get(url, proxies=proxies)
ou
# pip install requests
# pip install pysocks
import requests
proxies = {
"http": "socks5://127.0.0.1:9050",
"https": "socks5://127.0.0.1:9050",
}
req = requests.Session()
url = "http://jsonip.com"
response = req.get(url, proxies=proxies)
ip = response.json()['ip']
print('Your public IP is:', ip)
Proxies en tout genre
Utiliser des proxies publiques à la place de Tor. Scraping totalement indétectable si le proxy change très régulièrement. Par exemple, des failles XSS ou botnet (TDL4 rootkit de 2011 https://www.youtube.com/watch?v=k3g5gNcHoFM) sont exploitées…
Etant donné que l’on parle de proxy, sécurité et Python dans cet article, j’en profite pour vous indiquer quelques références que je recommende pour apprendre la sécurité avec Python.
Et enfin, cette référence pour avoir un point de vue plus entreprise.
Browser headless type Selenium
Il existe pas mal de solutions concurrentes.
Selenium fontionne très bien. RPA python fonctionne également très bien et il permet de mieux intéragir avec le desktop.
Selenium conjugé à fake_useragent
, des tailles d’écran différentes et le plugin browsermob-proxy
permet de récupérer à peu près tout ce qu’on veut. Il n’est pas forcément nécessaire de contourner le filtrage IP ou plus généralement les quota limits car malheureusement rarement mis en place.
rpa
a le mérite d’être excessivement simple à boostraper.
Un simplepip install rpa
et un minuscule script comme ci-dessous permet de d’ouvrir un browser sur une URL donnée.url = "https://..." r.init( visual_automation=True, chrome_browser=True, headless_mode=False, turbo_mode=False, ) r.url(url) # r.click('//a[normalize-space()="Inventaire complet"]') r.wait(10) r.close()
Pour les XPATHs utiliser l’extensions SelectorsHUB
Captcha
Malheureusement ils se contournent.
Exemple de resources: