-
Notifications
You must be signed in to change notification settings - Fork 0
full_options
anonympins edited this page Sep 5, 2026
·
3 revisions
This document lists all configuration properties available for both PHP and Node.js.
Here is a comprehensive overview of the full configuration array you can pass to the engine in PHP:
<?php
$securityConfig = [
// Suspicion metrics weights. Sum does not need to equal 1.0.
'weights' => [
'historyScore' => 0.3, // Penalizes IP rotation (proxy)
'rotationScore' => 0.5, // Penalizes rapid fingerprint changes
'headerAnomalyScore' => 0.1, // Penalizes missing or abnormal headers
'requestPatternScore' => 0.6,// Penalizes automated scrape patterns
'inconsistencyScore' => 0.8, // Penalizes cookie hijacking
'behaviorScore' => 0.7, // Penalizes non-human interactions (mouse/keys)
'honeypotScore' => 1.0, // Penalizes bots filling trap inputs
'crossLayerInconsistencyScore' => 0.4, // Penalizes mismatched OS vs User-Agent
'timeInconsistencyScore' => 0.9, // Penalizes replayed metric timestamps
'tlsSpoofingScore' => 0.8, // Penalizes mismatched JA3/JA4 vs User-Agent
'botScore' => 1.0, // Penalizes automated environments (WebDriver, etc.)
'clientHintsInconsistencyScore' => 0.7, // Penalizes mismatched Client Hints vs User-Agent
],
// Enforcement thresholds
'thresholds' => [
'low' => 20, // Triggers minimal CPU challenge
'medium' => 45, // Triggers combined CPU/Memory challenge
'high' => 75, // Triggers severe CPU/Memory challenge
'block' => 95, // Instantly blocks the client
],
'cpu' => [
'minDifficultyBits' => 8,
'maxDifficultyBits' => 24,
],
// Time limits (in milliseconds)
'ticketMaxAge' => 3600000, // 1 hour clearance ticket lifespan
'challengeTtl' => 300000, // 5 minutes nonce validity
'deviceIdCookieMaxAge' => null, // Session cookie (or set integer in ms)
'challengePagePath' => null, // Custom challenge page template path
'verbose' => false, // Debug logging toggle
// Settings for request sequence / scraper analysis
'patterns' => [
'historySize' => 10,
'minSamples' => 5,
'regularityThreshold' => 50,
'benfordThreshold' => 0.15,
'patternWeight' => 80,
'decayFactor' => 0.9,
'inactivityReset' => 5000,
],
// Trap configuration
'honeypot' => [
'fields' => ['email_confirm', 'user_nickname'],
'trapUrls' => ['/wp-admin', '/.env'],
'detectInjections' => ['sql', 'rce', 'traversal', 'xxe'],
],
// Whitelist definitions
'whitelist' => [
[
'type' => 'allowlist',
'entries' => ['192.168.1.100', '203.0.113.0/24']
],
[
'type' => 'path_allowlist',
'entries' => ['/api/public/*']
]
]
];Here is the same full configuration tailored for Node.js:
const securityConfig = {
weights: {
historyScore: 0.3,
rotationScore: 0.5,
headerAnomalyScore: 0.1,
requestPatternScore: 0.6,
inconsistencyScore: 0.8,
behaviorScore: 0.7,
honeypotScore: 1.0,
crossLayerInconsistencyScore: 0.4,
timeInconsistencyScore: 0.9,
tlsSpoofingScore: 0.8,
clientHintsInconsistencyScore: 0.7
},
thresholds: {
low: 20,
medium: 45,
high: 75,
block: 95,
},
cpu: {
minDifficultyBits: 8,
maxDifficultyBits: 32,
},
ticketMaxAge: 3600000,
challengeTtl: 300000,
deviceIdCookieMaxAge: undefined,
challengePagePath: './path/to/custom-challenge-page.html',
verbose: process.env.NODE_ENV !== 'production',
patterns: {
velocityThreshold: 800,
burstThreshold: 1500,
scrapeThreshold: 1000,
historySize: 10,
minSamples: 5,
regularityThreshold: 50,
benfordThreshold: 0.15,
patternWeight: 80,
decayFactor: 0.9,
inactivityReset: 5000,
},
honeypot: {
fields: ['email_confirm', 'admin'],
trapUrls: ['/wp-admin', '/.env'],
detectInjections: ['sql', 'rce', 'traversal', 'xxe'],
analyzers: [
// Custom async/sync custom functions
(data) => {
const spamKeywords = ['viagra', 'free money'];
const dataString = JSON.stringify(data).toLowerCase();
return spamKeywords.some(kw => dataString.includes(keyword));
}
]
},
whitelist: [
{ type: 'allowlist', entries: ['127.0.0.1', '10.0.0.0/8'] },
{ type: 'path_allowlist', entries: ['/assets/*', '/favicon.ico'] }
],
isStaticResource: (req) => req.path.startsWith('/static/'),
isApiRequest: (req) => req.path.startsWith('/api/') || req.headers.accept?.includes('application/json'),
logger: (log) => console.log('Log recorded:', log.type),
autotuning: {
trafficData: [],
interval: 1800000, // 30 mins
minDataPoints: 200,
maxDataPoints: 20000,
savePath: './security-config.optimized.json'
},
enableUsefulWork: true,
dryRun: false,
trustedProxies: ['127.0.0.1', '192.168.1.0/24'],
wasm: true // use fast WASM library to calculate challenges (true by default)
};For quick starts without manually defining everything, use pre-made profiles:
| Profile Name | Target / Use-case |
|---|---|
balanced |
Standard websites, balanced UX & security. |
strict |
High security / sensitive dashboards. All new devices are challenged. |
api |
Focused heavily on rate limit patterns and API scrapers. |
blog |
Lenient on human readers, heavy on anti-scraping and spam comment honeypots. |
ecommerce |
Strict tracking against scalper bots and account takeover. |
Node.js:
import { createSecurityProfile } from '@anonympins/fingerprint';
const config = createSecurityProfile('ecommerce', {
verbose: true
// overrides here...
});PHP
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use Anonympins\Fingerprint\Config\SecurityProfiles;
use Anonympins\Fingerprint\DirectFingerprint;
// Création du profil avec surcharges
$securityConfig = SecurityProfiles::createSecurityProfile('ecommerce', [
'verbose' => true,
]);
// Initialisation du protecteur avec la configuration
$protector = new DirectFingerprint($securityConfig);
// Analyse et protection de la requête (bloque ou lance un challenge si suspect)
$fingerprint = $protector->protect();
// Si le script continue, la requête est légitime
echo "Welcome on the secured page !";