sensitive-data-masker

star 8

Intelligent sensitive data detection and masking. Uses Microsoft Presidio + SQLite for automatic PII redaction with local restoration support.

modbender By modbender schedule Updated 3/6/2026

name: sensitive-data-masker description: Intelligent sensitive data detection and masking. Uses Microsoft Presidio + SQLite for automatic PII redaction with local restoration support. homepage: https://gitee.com/subline/onepeace/tree/develop/src/skills/sensitive-data-masker metadata: { "openclaw": { "emoji": "๐Ÿ”", "events": ["message:received"], "requires": { "bins": ["python3"], "python_packages": ["presidio-analyzer", "presidio-anonymizer", "spacy"] }, "install": [ { "id": "pip", "kind": "pip", "package": "presidio-analyzer presidio-anonymizer", "label": "Install Microsoft Presidio" }, { "id": "spacy", "kind": "pip", "package": "spacy", "label": "Install spaCy NLP" }, { "id": "spacy-model", "kind": "command", "command": "python3 -m spacy download zh_core_web_sm", "label": "Download Chinese NLP model" } ] }

}

Sensitive Data Masker

Intelligent sensitive data detection and masking using Microsoft Presidio with SQLite + LRU cache storage.

Features

  • โœ… Intelligent detection - Microsoft Presidio (NLP + rules)
  • โœ… Fast storage - SQLite + LRU cache
  • โœ… Local restoration - 7-day temporary mapping table
  • โœ… Auto cleanup - Expired entries removed automatically
  • โœ… 100% local - No external API required
  • โœ… OpenClaw Hook - Automatic masking on message received

How It Works

User Message
    โ†“
Channel Plugin (Feishu/Telegram/etc)
    โ†“
OpenClaw Gateway (message:received)
    โ†“
Sensitive Data Masker Hook โ† Intercept here
    โ†“
Presidio Detection (NLP + Rules)
    โ†“
SQLite + Cache Store Mapping
    โ†“
Masked Message
    โ†“
Send to LLM API (Safe)
    โ†“
Restore Before Task Execution
    โ†“
Execute with Original Data

Detection Types

Type Examples Masked As
PASSWORD password=MySecret123 [PASSWORD:xxx]
API_KEY sk-abcdefghijklmnop [API_KEY:xxx]
TOKEN token=xyz123 [TOKEN:xxx]
SECRET secret=abc+/== [SECRET:xxx]
PRIVATE_KEY BEGIN RSA PRIVATE KEY [PRIVATE_KEY:xxx]
DB_CONNECTION mongodb://user:pass@host [DB_CONNECTION:xxx]
EMAIL_ADDRESS user@example.com [EMAIL_ADDRESS:xxx]
PHONE_NUMBER 13800138000 [PHONE_NUMBER:xxx]
CREDIT_CARD 4111111111111111 [CREDIT_CARD:xxx]
PERSON John Doe [PERSON:xxx]
LOCATION 123 Main St [LOCATION:xxx]
URL https://example.com [URL:xxx]

Installation

# Install dependencies
pip install presidio-analyzer presidio-anonymizer
python3 -m spacy download zh_core_web_sm

# Enable Hook
openclaw hooks enable sensitive-data-masker

# Verify
openclaw hooks check

Usage Examples

User sends:

My password is MySecret123, email is user@example.com

Masked (to API):

My password is [PASSWORD:f2ae1ea6], email is [EMAIL_ADDRESS:96770696]

Mapping stored (7 days):

{
  "f2ae1ea6": "password=MySecret123",
  "96770696": "user@example.com"
}

Local restoration (for task execution):

My password is MySecret123, email is user@example.com

Configuration

File: ~/.openclaw/data/sensitive-masker/config.json

{
  "enabled": true,
  "ttl_days": 7,
  "cache_size": 1000,
  "auto_cleanup": true,
  "cleanup_interval_hours": 1,
  "log_enabled": true,
  "encrypt_storage": false,
  "presidio": {
    "language": "zh",
    "entities": ["PHONE_NUMBER", "EMAIL_ADDRESS", ...],
    "custom_patterns": true
  }
}

Management Commands

# Test masking
python3 sensitive-masker.py test "my password=123"

# View statistics
python3 sensitive-masker.py stats

# Cleanup expired
python3 sensitive-masker.py cleanup

# Clear all mappings
python3 sensitive-masker.py clear

Performance

Operation Latency
Hot query (cache) < 0.1ms
Cold query (SQLite) ~0.5ms
Write < 2ms
Max records 100,000+

Cache hit rate: > 90% typical

Security Features

  • โœ… File permissions: 600 (owner read/write only)
  • โœ… SQLite transaction safety
  • โœ… Auto-expiry cleanup
  • โœ… LRU cache eviction
  • โœ… Local storage only
  • โœ… Optional encryption at rest

Architecture

Components

  1. PresidioDetector - Microsoft Presidio integration
  2. SensitiveMappingStore - SQLite + LRU cache
  3. ChannelSensitiveMasker - Main masking logic
  4. OpenClaw Hook - Gateway integration

Database Schema

CREATE TABLE mappings (
    mask_id TEXT PRIMARY KEY,
    original TEXT NOT NULL,
    data_type TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    expires_at TIMESTAMP NOT NULL,
    usage_count INTEGER DEFAULT 0
);

CREATE INDEX idx_expires_at ON mappings(expires_at);
CREATE INDEX idx_data_type ON mappings(data_type);

Files

sensitive-data-masker/
โ”œโ”€โ”€ SKILL.md                    # This file (English)
โ”œโ”€โ”€ SKILL.md                    # Chinese version
โ”œโ”€โ”€ sensitive-masker.py         # Core script
โ”œโ”€โ”€ handler.js                  # OpenClaw Hook
โ”œโ”€โ”€ masker-wrapper.py           # Python wrapper
โ”œโ”€โ”€ DESIGN.md                   # Design document
โ”œโ”€โ”€ README.md                   # User guide
โ”œโ”€โ”€ RESEARCH-EXISTING-SOLUTIONS.md  # Market research
โ””โ”€โ”€ _meta.json                  # Metadata

Version History

v1.0.0 (2026-03-03)

  • Initial release
  • Microsoft Presidio integration
  • SQLite + LRU cache storage
  • OpenClaw Hook support
  • 7-day TTL mapping table
  • Auto cleanup

Repository

Source: https://gitee.com/subline/onepeace/tree/develop/src/skills/sensitive-data-masker

License: MIT

Author: TK

Issues: https://gitee.com/subline/onepeace/issues

Credits

Related Skills

  • ssh-batch-manager - Batch SSH key management
  • healthcheck - Security hardening and audits
  • skill-creator - Create new skills
Install via CLI
npx skills add https://github.com/modbender/skill-library-mcp --skill sensitive-data-masker
Repository Details
star Stars 8
call_split Forks 2
navigation Branch main
article Path SKILL.md
More from Creator