- Matrice JA4 × User-Agent — {matrixData.length} fingerprints
+
+ Matrice JA4 × User-Agent — {matrixData.length} fingerprints
Pour chaque JA4, répartition des User-Agents observés. 🎭 = spoofing suspect détecté.
@@ -1204,7 +1206,7 @@ export function FingerprintsView() {
onClick={() => handleColSort('botnet_score')}
>
- Score botnet
+ Score botnet
{sortField === 'botnet_score'
? {sortDir === 'desc' ? '↓' : '↑'}
: ⇅}
diff --git a/frontend/src/components/HeaderFingerprintView.tsx b/frontend/src/components/HeaderFingerprintView.tsx
index 0312b17..3c15ca3 100644
--- a/frontend/src/components/HeaderFingerprintView.tsx
+++ b/frontend/src/components/HeaderFingerprintView.tsx
@@ -241,12 +241,14 @@ export function HeaderFingerprintView() {
{
key: 'sec_fetch_mode',
label: 'Sec-Fetch Mode',
+ tooltip: TIPS.sec_fetch_dest,
sortable: true,
render: (v) => {v || '—'},
},
{
key: 'sec_fetch_dest',
label: 'Sec-Fetch Dest',
+ tooltip: TIPS.sec_fetch_dest,
sortable: true,
render: (v) => {v || '—'},
},
diff --git a/frontend/src/components/IncidentsView.tsx b/frontend/src/components/IncidentsView.tsx
index bd8df61..19409cc 100644
--- a/frontend/src/components/IncidentsView.tsx
+++ b/frontend/src/components/IncidentsView.tsx
@@ -1,5 +1,7 @@
import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
+import { InfoTip } from './ui/Tooltip';
+import { TIPS } from './ui/tooltips';
interface IncidentCluster {
id: string;
@@ -147,10 +149,10 @@ export function IncidentsView() {
{baseline && (
{([
- { key: 'total_detections', label: 'Détections 24h', icon: '📊' },
- { key: 'unique_ips', label: 'IPs uniques', icon: '🖥️' },
- { key: 'critical_alerts', label: 'Alertes CRITICAL', icon: '🔴' },
- ] as { key: keyof BaselineData; label: string; icon: string }[]).map(({ key, label, icon }) => {
+ { key: 'total_detections', label: 'Détections 24h', icon: '📊', tip: TIPS.total_detections_stat },
+ { key: 'unique_ips', label: 'IPs uniques', icon: '🖥️', tip: TIPS.unique_ips_stat },
+ { key: 'critical_alerts', label: 'Alertes CRITICAL', icon: '🔴', tip: TIPS.risk_critical },
+ ] as { key: keyof BaselineData; label: string; icon: string; tip: string }[]).map(({ key, label, icon, tip }) => {
const m = baseline[key];
const up = m.pct_change > 0;
const neutral = m.pct_change === 0;
@@ -158,7 +160,7 @@ export function IncidentsView() {
{icon}
-
{label}
+
{label}
{m.today.toLocaleString('fr-FR')}
hier: {m.yesterday.toLocaleString('fr-FR')}
@@ -292,7 +294,7 @@ export function IncidentsView() {
-
+
{cluster.severity}
{cluster.id}
@@ -302,7 +304,7 @@ export function IncidentsView() {
{cluster.score}/100
-
Score de risque
+
Score de risque
@@ -327,11 +329,11 @@ export function IncidentsView() {
-
ASN
+
ASN
AS{cluster.asn || '?'}
-
Tendance
+
Tendance
-
JA4 Principal
+
JA4 Principal
{cluster.ja4}
)}
diff --git a/frontend/src/components/JA4InvestigationView.tsx b/frontend/src/components/JA4InvestigationView.tsx
index 26a5c97..aa78b71 100644
--- a/frontend/src/components/JA4InvestigationView.tsx
+++ b/frontend/src/components/JA4InvestigationView.tsx
@@ -1,6 +1,8 @@
import { useParams, useNavigate } from 'react-router-dom';
import { useEffect, useState } from 'react';
import { JA4CorrelationSummary } from './analysis/JA4CorrelationSummary';
+import { InfoTip } from './ui/Tooltip';
+import { TIPS } from './ui/tooltips';
interface JA4InvestigationData {
ja4: string;
@@ -164,7 +166,7 @@ export function JA4InvestigationView() {
-
JA4 Fingerprint
+
JA4 Fingerprint
{data.ja4}
@@ -176,7 +178,7 @@ export function JA4InvestigationView() {
-
+
@@ -247,7 +249,7 @@ export function JA4InvestigationView() {
-
🏢 TOP ASNs
+
🏢 TOP ASNs
{data.top_asns.map((asn, idx) => (
@@ -318,10 +320,10 @@ export function JA4InvestigationView() {
);
}
-function StatBox({ label, value }: { label: string; value: string }) {
+function StatBox({ label, value, tip }: { label: string; value: string; tip?: string }) {
return (
-
{label}
+
{label}{tip && }
{value}
);
diff --git a/frontend/src/components/PivotView.tsx b/frontend/src/components/PivotView.tsx
index 034cce7..4ecf728 100644
--- a/frontend/src/components/PivotView.tsx
+++ b/frontend/src/components/PivotView.tsx
@@ -12,6 +12,8 @@
import { useState, useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
+import { InfoTip } from './ui/Tooltip';
+import { TIPS } from './ui/tooltips';
// ─── Types ────────────────────────────────────────────────────────────────────
@@ -47,11 +49,11 @@ interface VariabilityData {
type AttrKey = keyof VariabilityData['attributes'];
-const ATTR_ROWS: { key: AttrKey; label: string; icon: string }[] = [
- { key: 'ja4', label: 'JA4 Fingerprint', icon: '🔐' },
+const ATTR_ROWS: { key: AttrKey; label: string; icon: string; tip?: string }[] = [
+ { key: 'ja4', label: 'JA4 Fingerprint', icon: '🔐', tip: TIPS.ja4 },
{ key: 'user_agents', label: 'User-Agents', icon: '🤖' },
{ key: 'countries', label: 'Pays', icon: '🌍' },
- { key: 'asns', label: 'ASN', icon: '🏢' },
+ { key: 'asns', label: 'ASN', icon: '🏢', tip: TIPS.asn },
{ key: 'hosts', label: 'Hosts cibles', icon: '🖥️' },
{ key: 'subnets', label: 'Subnets', icon: '🔷' },
];
@@ -283,6 +285,7 @@ export function PivotView() {
{row.icon}
{row.label}
+ {row.tip && }
{shared.size > 0 && (
diff --git a/frontend/src/components/SubnetInvestigation.tsx b/frontend/src/components/SubnetInvestigation.tsx
index a86d45b..8649085 100644
--- a/frontend/src/components/SubnetInvestigation.tsx
+++ b/frontend/src/components/SubnetInvestigation.tsx
@@ -1,5 +1,7 @@
import { useEffect, useState } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
+import { InfoTip } from './ui/Tooltip';
+import { TIPS } from './ui/tooltips';
interface SubnetIP {
ip: string;
@@ -139,7 +141,7 @@ export function SubnetInvestigation() {
{stats.total_detections.toLocaleString()}
-
JA4 Uniques
+
JA4 Uniques
{stats.unique_ja4}
@@ -161,7 +163,7 @@ export function SubnetInvestigation() {
-
ASN Principal
+
ASN Principal
AS{stats.primary_asn}
@@ -187,8 +189,8 @@ export function SubnetInvestigation() {
UA |
Pays |
ASN |
- Menace |
- Score |
+ Menace |
+ Score |
Actions |
diff --git a/frontend/src/components/ThreatIntelView.tsx b/frontend/src/components/ThreatIntelView.tsx
index b2079d0..b5e16e4 100644
--- a/frontend/src/components/ThreatIntelView.tsx
+++ b/frontend/src/components/ThreatIntelView.tsx
@@ -1,4 +1,6 @@
import { useEffect, useState } from 'react';
+import { InfoTip } from './ui/Tooltip';
+import { TIPS } from './ui/tooltips';
interface Classification {
ip?: string;
@@ -229,7 +231,7 @@ export function ThreatIntelView() {
Entité |
Label |
Tags |
- Confiance |
+ Confiance |
Analyste |