{"id":46645136,"url":"https://github.com/ashvisualtheme/file-integrity-scanner","last_synced_at":"2026-03-08T04:32:21.518Z","repository":{"id":321906211,"uuid":"1083895469","full_name":"ashvisualtheme/file-integrity-scanner","owner":"ashvisualtheme","description":"Proactively monitors your OJS core, Plugins, Theme files. By comparing your installation against a trusted, official hash repository, it instantly detects unauthorized file changes, additions, or deletions. Get early warnings of potential security breaches and malware to keep your journal secure.","archived":false,"fork":false,"pushed_at":"2026-02-19T16:16:54.000Z","size":86,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-19T19:57:05.744Z","etag":null,"topics":["integrity-monitoring","ojs-plugin","ojs-plugins","ojs3","ojs3-plugin"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ashvisualtheme.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.MD","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-26T23:05:37.000Z","updated_at":"2025-11-29T06:57:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ashvisualtheme/file-integrity-scanner","commit_stats":null,"previous_names":["ashvisualtheme/file-integrity-scanner"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/ashvisualtheme/file-integrity-scanner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashvisualtheme%2Ffile-integrity-scanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashvisualtheme%2Ffile-integrity-scanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashvisualtheme%2Ffile-integrity-scanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashvisualtheme%2Ffile-integrity-scanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ashvisualtheme","download_url":"https://codeload.github.com/ashvisualtheme/file-integrity-scanner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ashvisualtheme%2Ffile-integrity-scanner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30245227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T00:58:18.660Z","status":"online","status_checked_at":"2026-03-08T02:00:06.215Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["integrity-monitoring","ojs-plugin","ojs-plugins","ojs3","ojs3-plugin"],"created_at":"2026-03-08T04:32:20.408Z","updated_at":"2026-03-08T04:32:21.491Z","avatar_url":"https://github.com/ashvisualtheme.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛡️ File Integrity Scanner Plugin for OJS 3.5.x\n\n## **Uncompromising Security for Your OJS Installation**\n\nThis essential plugin dramatically strengthens your OJS security posture by proactively scanning your core application and plugin files. It uses **cryptographic hash comparison** against known official baselines to instantly detect unauthorized modifications, additions, or deletions that could signal file corruption or a security breach.\n\n---\n\n## ✨ Key Features at a Glance\n\n| Feature                           | Description                                                                                                                                                                                                                                                                                                          |\n| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| 🕵️ **Proactive Change Detection** | Automatically calculates local **SHA256 hashes** and compares them to the official, version-specific baselines stored remotely.                                                                                                                                                                                      |\n| 🎯 **Pinpoint Accuracy**          | Validates integrity for both the **OJS Core files** and individual **Plugins**, ensuring nothing is left unchecked.                                                                                                                                                                                                  |\n| 📧 **Critical Alerts**            | Sends a detailed email notification to the site contact address, summarizing all detected files that were **Modified**, **Added**, or **Deleted** (both against the official baseline and for locally monitored files).                                                                                              |\n| ⏱️ **Scheduled Automation**       | Registers a task to run a full integrity scan automatically **once every 24 hours**.                                                                                                                                                                                                                                 |\n| ✨ **Smart Cache System**         | Caches hash baselines for efficiency and **automatically cleans up orphaned and outdated cache files** after OJS or plugin upgrades, ensuring fresh baselines are always used.                                                                                                                                       |\n| 📝 **Manual Excludes**            | Allows administrators to specify a list of files or directories to be **monitored for local changes but excluded from baseline comparison**. This helps reduce false positives from intentional modifications (e.g., `config.inc.php`) while still alerting you to any unauthorized changes to these critical files. |\n\n---\n\n### **🔍 Detected Security Issue Types**\n\nThe scan precisely identifies deviations from both the official baseline and locally monitored files:\n\n#### Baseline Deviations\n\n- **⚠️ Modified:** A core/plugin file exists, but its hash does not match the official baseline (indicates a change or corruption).\n- **🚨 Added:** A file exists locally but is **not** present in the official baseline (a potential indicator of malicious file uploads).\n- **❌ Deleted:** A file present in the official baseline is missing from the local installation (potential file system corruption or removal by an attacker).\n\n#### Local Changes (for Monitored Exclusions)\n\nThese alerts apply to files/directories you've manually excluded from baseline comparison (like `config.inc.php`) but still want to monitor for any changes.\n\n- **⚠️ Monitored Modified:** An excluded file has changed locally since the last scan.\n- **🚨 Monitored Added:** A new file has been found within an excluded directory (e.g., a new file in `public/`).\n- **❌ Monitored Deleted:** A file previously present in an excluded directory is now missing.\n\n---\n\n## ⚙️ Requirements \u0026 Installation\n\n### System Requirements\n\n- **OJS version:** **3.4.x** (requires PKP library scheduled task support).\n- **PHP 8.1 and above:** Must support `hash_file('sha256', ...)` and allow `file_get_contents(...)` for downloading remote JSON files.\n- **Acron Plugin:** Must be enabled to allow the automated daily scan to run.\n- **Email Configuration:** Email sending `(smtp)` must be properly configured in `config.inc.php` to receive scan alerts.\n- **Administrator Account** for manage and excecutions.\n\n### Installation in 5 Simple Steps\n\n1.  ⬇️ Download the latest release from the **plugin's release page**.\n2.  🔑 Log in to your OJS dashboard as a **Site Administrator**.\n3.  ➡️ Navigate to **Website Settings \u003e Plugins \u003e Upload a New Plugin**.\n4.  📤 Upload the downloaded `.tar.gz` file.\n5.  ✅ Once installation is complete, **enable** the plugin under the **Generic Plugins** tab.\n\n---\n\n## 🛠️ Usage and Administration\n\nThe plugin is designed for automated security, but administrators retain full control over immediate actions and cache management.\n\n### **Automatic Daily Schedule**\n\nThe integrity scan runs automatically **once per day** using the OJS scheduled tasks feature (Acron plugin).\n\n- You will **only receive an email notification** if the scan detects any file changes. If your file system is clean, **no email** is sent.\n\n### **Manual Actions (Instant Control)**\n\n1.  Navigate to **Website Settings \u003e Plugins**.\n2.  Find the **File Integrity Plugin** and click the actions arrow.\n3.  You have two powerful actions:\n    - **⚡ Run Manual Scan:** Instantly execute a full, on-demand scan. This is ideal after major updates or when suspicious activity is suspected.\n    - **🗑️ Clear Hash Cache:** Deletes all cached baseline JSON files. While the plugin **automatically removes outdated cache files** after software upgrades, this manual action is useful if you suspect the cache is corrupt or want to force a fresh download for all items on the next scan.\n\n### **Configuring Settings**\n\nYou can configure the plugin to exclude specific files or directories from the baseline comparison and add additional email recipients for scan notifications.\n\n1.  Navigate to **Website Settings \u003e Plugins**.\n2.  Find the **File Integrity Plugin** and click the actions arrow, then select **Settings**.\n3.  In the settings modal, you will find two fields:\n    - **Manual Excludes**: Enter the paths of files or directories you wish to exclude from the baseline comparison, one path per line. These paths will be monitored for local changes instead. Paths should be relative to your OJS root directory (e.g., `.htaccess` or `plugins/generic/myCustomPlugin`).\n    - **Additional Notification Emails**: Enter additional email addresses that should receive the scan reports. You can separate multiple emails with a comma, space, or new line.\n\n    **Example `Manual Excludes`:**\n\n    ```\n    .htaccess\n    google7tebgr5hcdtth.html\n    plugins/themes/my-custom-theme/\n    ```\n\n    **Example `Additional Notification Emails`:**\n\n    ```\n    admin@myjournal.com, it.lead@myjournal.com\n    security.officer@university.edu\n    ```\n\n4.  Click **Save**. Your settings will be applied to the next scan.\n\n---\n\n## 🧑‍💻 Development, Support, and The Hash Ecosystem\n\n### Developed and Maintained by **AshVisualTheme**\n\nWe are committed to maintaining the security and effectiveness of this critical tool.\n\n📧 **Dedicated Support:** For technical support or inquiries regarding custom OJS development, please contact us at `support@ashvisual.com`.\n\n### **Hash Baseline Source \u0026 Contribution**\n\nThe plugin is powered by a robust security ecosystem. It fetches the official, cryptographically verified baselines from our dedicated public GitHub repository:\n\n**Baseline Source URL**:\n`https://github.com/ashvisualtheme/hash-repo`\n\n**Want to add your plugin to our ecosystem?** If you maintain a widely-used OJS plugin, please review our comprehensive contribution guidelines directly in the [**Hash Repository**](https://github.com/ashvisualtheme/hash-repo) to have your official baseline included!\n\n---\n\n## 🎨 Transform Your Journal: Discover Professional OJS Themes\n\nAs specialists in OJS infrastructure, **AshVisualTheme** also develops high-quality, professional themes.\n\nStop using default OJS templates. **Elevate your reader and author experience today!**\n\n➡️ **View Our Professional Themes in Action:** \u003chttps://demo-ojs.ashvisual.com\u003e\n\n---\n\n## License\n\nThis plugin is released under the **GNU General Public License v3**. See the `LICENSE` file for full terms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashvisualtheme%2Ffile-integrity-scanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashvisualtheme%2Ffile-integrity-scanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashvisualtheme%2Ffile-integrity-scanner/lists"}