Shugoi Ruby (Rails)
Protection anti-abus Shugoi pour Ruby on Rails — parité complète avec le module Node shugoi.
Bloque les bots, scrapers et clients headless avec :
- Pre-flight PoW challenge (307 + tableau ASCII pour curl/view-source, JS de résolution inline pour les navigateurs)
- Machine fingerprinting (guard-detect) + whitelist
- Render-grant HMAC (lié au siteKey + token + IP + TTL) — anti-bypass "token-only"
- Split-render : skeleton unicode injecté dans la page, remplacé par le contenu réel après vérification
Installation
# Gemfile
gem "shugoi"
Configuration (Rails)
# config/initializers/shugoi.rb
Shugoi.configure do |config|
config.site_key = "sg_sk_live_…"
config.secret = "…" # secret du site (signature des tokens)
config.debug = Rails.env.development?
# config.base_url = "https://shugoi.com/api/v1"
# config.allowlist = ["/api", "/legal"]
end
Le railtie monte automatiquement le middleware sur l'app Rails.
Usage Rack pur
# config.ru
require "shugoi"
use Shugoi, site_key: "sg_sk_live_…", signing_secret: "…"
run MyApp
Options
| Option | Défaut | Description |
|---|---|---|
site_key |
— | Votre siteKey Shugoi (requis) |
secret |
— | Secret du site |
signing_secret |
secret |
Secret HMAC de signature |
base_url |
https://shugoi.com/api/v1 |
API Shugoi |
allowlist |
["/api", "/legal"] |
Chemins sans protection |
auto_inject |
true |
Injecte les guards dans le HTML |
split_render |
true |
Skeleton + render |
restricted_access |
false |
Page d'accès restreint |
pow_difficulty |
10 |
Bits du proof-of-work |
debug |
false |
Logs console |
Tests
bundle install
bundle exec rspec
Parité avec le module Node
Le flux réplique exactement shugoi 0.3.6 (npm) :
core.evaluate→ challenge 307 //__sg_challenge/ blocage headlessinjectGuardScripts→ token signé + skeleton unicoderenderResponseData→ vérification grant + token, service du HTML stockéverifyRenderGrant→ formatbase36(ts):HMAC(secret, "render-grant:siteKey:mid:token:ip:ts")