ARK Plugin for OJS | Version: 3.1.0.0 | Last Updated: 2026-07-04
| Version | Supported |
|---|---|
| 3.1.x | ✅ |
| < 3.1 | ❌ |
| Control | Implementation |
|---|---|
| User Authentication | OJS session validation |
| Role-Based Access | Manager/Editor only for ARK operations |
| CSRF Protection | Token validation on all state changes |
| API Authentication | Temporary tokens (5 min expiry) |
| Control | Implementation |
|---|---|
| Encryption | SSL/TLS for all external communication |
| Rate Limiting | Exponential backoff per IP |
| SQL Injection | Prepared statements, exact match only |
| Timing Attacks | hash_equals() for all comparisons |
| Database | PostgreSQL and MySQL compatible |
- Opt-out: Data is sent by default, user can disable
- Minimal data: Only NAAN, ARK count, plugin version
- No PII: No emails, names, IPs, or user data
- Push model: Journal controls when data is sent
- Audit trail: All consent changes are logged
The plugin uses a two-layer verification system to ensure only legitimate journals can send telemetry data:
The plugin automatically creates an identity.txt file in the plugin folder during installation. This file serves as proof that the plugin is actually installed on the domain.
- Created automatically when the plugin is activated
- Telemetry server verifies the file exists on the domain before accepting data
- Prevents external actors from sending data on behalf of the journal
In addition to the identity file, the plugin generates a unique private key during installation.
- A unique key is generated and stored in the OJS database
- The key is registered with the telemetry server during configuration
- Each statistics submission requires the private key for authentication
identity.txt: Verifies the plugin exists on the domain- Private key: Verifies the submission comes from the legitimate journal
- Together, they prevent spoofing and unauthorized access
DO NOT report via GitHub Issues.
Email: m.luryhortencio@gmail.com
Subject: [ARK Plugin Security] - Brief Description
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
| Severity | Initial Response | Fix Release |
|---|---|---|
| Critical | 24 hours | 7 days |
| High | 48 hours | 14 days |
| Medium | 72 hours | 30 days |
| Low | 7 days | 60 days |
- Review permissions: Only grant Manager/Editor roles to trusted users
- Update regularly: Keep plugin updated to latest version
- Review telemetry: Check if data sharing is enabled as desired
- Monitor logs: Check for failed validation attempts
- Regular backups: Backup issue_settings and publication_settings
- Verify identity.txt: Ensure plugin's identity file is present
| Feature | Status |
|---|---|
| OJS Authentication | ✅ |
| Role-Based Access | ✅ |
| CSRF Protection | ✅ |
| Rate Limiting | ✅ |
| SQL Injection Prevention | ✅ |
| Timing Attack Protection | ✅ |
| SSL/TLS Encryption | ✅ |
| Data Minimization | ✅ |
| Opt-out Telemetry | ✅ |
| Consent Audit | ✅ |
| Privacy Policy | ✅ |
| PostgreSQL Support | ✅ |
Security vulnerabilities will be disclosed:
- Private disclosure: First to reporter (with credit)
- Fix release: Patch within timeline above
- Public disclosure: After fix is released and adopted
- PHP: 7.4+
- OJS: 3.5.0+
- No external Composer dependencies (uses OJS core)
Contact: m.luryhortencio@gmail.com
GitHub: https://github.com/lurymorais/ark-plugin