Skip to content

Instantly share code, notes, and snippets.

@joeldrapper
Created January 10, 2024 14:30
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joeldrapper/9e92896cb339b889a6667ab6a591f613 to your computer and use it in GitHub Desktop.
Save joeldrapper/9e92896cb339b889a6667ab6a591f613 to your computer and use it in GitHub Desktop.
Rails request fingerprinting concern
# frozen_string_literal: true
module Fingerprinting
def full_fingerprint
generate_fingerprint(
ip_fingerprint,
browser_fingerprint
)
end
def ip_fingerprint
generate_fingerprint(
request.remote_ip
)
end
def browser_fingerprint
generate_fingerprint(
request.headers["HTTP_ACCEPT"],
request.headers["HTTP_ACCEPT_ENCODING"],
request.headers["HTTP_ACCEPT_LANGUAGE"],
request.headers["HTTP_USER_AGENT"]
)
end
def generate_fingerprint(*data)
Digest::SHA256.hexdigest(fingerprint_pepper + data.join)
end
# This is added to fingerprints to make them impossible to brute force
def fingerprint_pepper
Rails.env.production? ? ENV.fetch("FINGERPRINT_PEPPER") : "test"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment