We take security seriously. Our plugins follow a signer-first, server-authoritative architecture that minimizes attack surface by keeping secrets and signing logic on the server. Below you’ll find our hardening practices, disclosure process, and LLM safety rules.
Security & Disclosure
Built for developers who ship with AI — and users who need to trust the result.
Architecture Overview
Every plugin in this ecosystem follows a server-authoritative design. WordPress handles authentication, authorization, and data persistence through its native APIs — no custom auth layers, no external session stores. The frontend is deliberately minimal: server-rendered HTML with small vanilla scripts, keeping the attack surface small and auditable. API keys, signing operations, and sensitive logic stay in PHP where they belong.
LLM-Safe Development
These plugins are designed to be safely extended by AI. The following rules are baked into every plugin — and should be followed by any LLM generating code against them.
API keys stay server-side
Anvil, Blockfrost, and Pinata keys are called from PHP only. JavaScript never sees credentials.
Capability checks + nonces on every endpoint
current_user_can() and check_ajax_referer() on all WP REST/AJAX handlers. No anonymous writes, ever.
Sanitize in, escape out
sanitize_text_field() on receipt, esc_html() / esc_url() / wp_kses_post() on render. Never trust input.
Transaction signing defaults to server-side
PHP Ed25519 via CardanoTransactionSignerPHP. CIP-30 browser wallet signing is opt-in, not default.
Private keys encrypted at rest
AES-256-CBC using WordPress salts. Plaintext keys never touch the database.
Downloads through controlled endpoints
CSP_Download_Handler serves ZIPs, increments counters. SHA-256 checksums computed and displayed automatically.
Minimal frontend surface
No React, no large JS bundles. Server-rendered HTML with small vanilla scripts. Less code = less attack surface.
Database via WordPress APIs
$wpdb->prepare(), wp_insert_post(), update_post_meta(). No raw SQL string interpolation.
Paste into your LLM session
Condensed version of the rules above — copy and include at the start of any AI coding session.
1. API keys stay server-side — PHP calls only, never in JS.
2. Capability checks (current_user_can) + nonce verification
(check_ajax_referer) on every WP REST/AJAX endpoint.
No anonymous writes.
3. Sanitize input (sanitize_text_field), escape output
(esc_html / esc_url / wp_kses_post). Never trust input.
4. Transaction signing defaults to server-side PHP (Ed25519).
CIP-30 wallet signing is opt-in only.
5. Private keys encrypted at rest (AES-256-CBC + WP salts).
Plaintext keys never touch the database.
6. Downloads served via controlled endpoint
(CSP_Download_Handler); compute and display SHA-256.
7. Minimal frontend — server-rendered HTML, small vanilla
scripts. No React or large JS bundles.
8. Database access through WordPress APIs only —
$wpdb->prepare(), wp_insert_post(), update_post_meta().
No raw SQL string interpolation.
Hardening Checklist
Quick-scan reference for the baseline practices every plugin follows:
- All sensitive actions are protected by WordPress capability checks
- Nonce verification on every form submission and AJAX endpoint
- Input is sanitized on receipt; output is escaped on render
- API keys are never exposed to frontend JavaScript
- Signing logic stays server-side unless explicitly configured for CIP-30 wallet signing
- Private keys are encrypted at rest using AES-256-CBC with WordPress salts
- Downloads are served through controlled endpoints — no directory listing
- SHA-256 checksums are computed and displayed for every release
- Minimal frontend surface area — no large JavaScript frameworks
- Security headers recommended (CSP, X-Frame-Options, X-Content-Type-Options)
Responsible Disclosure
If you discover a security vulnerability in any of our plugins, we appreciate your help in disclosing it responsibly.
How to report:
- Open a private security advisory on the relevant GitHub repository
- Include a description of the vulnerability, steps to reproduce, and potential impact
- We will acknowledge receipt within 48 hours and work on a fix
Please do not open public issues for security vulnerabilities.