Download the PHP package inqaba-security/gatekeeper without Composer

On this page you can find all versions of the php package inqaba-security/gatekeeper. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package gatekeeper

Gatekeeper

Bridge your Laravel application to your SOC. Gatekeeper (inqaba-security/gatekeeper) turns application-level security signals — logins, registrations, honeypot hits, scanner probes, endpoint abuse — into normalized Elastic Common Schema (ECS) events and ships them to Microsoft Sentinel, Wazuh, or any syslog/CEF pipeline, without slowing your requests down.

Features

Installation

Choose your destinations in .env:

Verify connectivity end-to-end:

Sinks

Microsoft Sentinel (recommended: Logs Ingestion API)

  1. Create a Data Collection Endpoint (DCE) and a custom table (e.g. Gatekeeper_CL) with a Data Collection Rule (DCR) in your Log Analytics workspace.
  2. Create an Entra ID app registration and grant it the Monitoring Metrics Publisher role on the DCR.
  3. Configure:

Events include a TimeGenerated field ready for the DCR transform. Example hunting query:

For legacy workspaces, set SIEM_SENTINEL_MODE=legacy with SIEM_SENTINEL_WORKSPACE_ID and SIEM_SENTINEL_SHARED_KEY (HTTP Data Collector API — deprecated by Microsoft but still common).

Wazuh

Events are appended as JSON lines to a file the Wazuh agent tails:

Agent ossec.conf:

Example manager rule (all ECS fields are available to the JSON decoder):

Rotate the file with logrotate (copytruncate) so the agent keeps its file handle.

Syslog / CEF

Use cef for ArcSight-style pipelines, including Sentinel's AMA/CEF connector and Wazuh's <remote> syslog listener.

Slack & Microsoft Teams (alerting)

Slack receives a Block Kit card (severity color bar, source IP + geo, user, request, MITRE technique, context). Teams receives an Adaptive Card via a Workflows/Power Automate "post to a channel when a webhook request is received" flow — the replacement for the retired O365 connectors. The minimum_severity floor is what makes these alerting channels rather than a firehose.

GeoIP enrichment

Enrichment happens at delivery time on the queue worker, results (including misses) are cached per IP for 24h, and any resolver failure degrades to an un-enriched event — GeoIP can never delay a request or lose an event. Fields land under ECS source.geo.* / source.as.* and show up in Slack/Teams alerts as 203.0.113.9 (Oslo, NO).

Custom resolver: bind your own Inqaba\Gatekeeper\Geo\GeoIpResolver implementation in the container.

Middleware

Register where appropriate (typically the global stack or the web/api groups):

Alias Purpose
siem.block Enforce the IP blocklist (put it first)
siem.abuse Per-IP brute force / scanning / rate-abuse detection
siem.scan Request payload threat scanner (detection-only by default)
siem.enum Resource enumeration / IDOR probing detection on parameterized routes
siem.honeypot Form honeypot validation on POST/PUT/PATCH/DELETE routes

Honeypots

Route honeypots are registered automatically from config('siem.honeypots.routes.paths') — decoy paths like wp-login.php, .env, phpmyadmin. Any hit emits a high-severity honeypot_route_hit event and (by default) blocks the source IP for 24h. Add paths that make sense for your stack; remove any that collide with real routes.

Decoys can take route parameters — useful for trapping ID-guessing scripts on endpoints that look like real resources:

The probed parameter values (route_params) and the matched pattern land in the event, so the SOC sees exactly what the attacker tried to pull. Make sure a decoy never shadows a real route.

Form honeypot — drop the component into any form and protect the route:

Bots that fill the invisible field or submit faster than min_seconds are logged and rejected (respond => 'reject') or fed a fake success (respond => 'silent').

Resource enumeration / IDOR detection

Attach siem.enum to routes with parameters:

Per IP and per route pattern (photos/{photo}), within a 5-minute window, it raises a high-severity resource_enumeration_detected event when it sees behaviour no human browsing session produces:

Pattern Trigger (defaults) What it catches
sequential_scan ≥ 5 numeric IDs advancing with a constant stride photos/1, 2, 3... and photos/10, 20, 30... scrapers
high_distinct_ids ≥ 15 distinct IDs touched breadth-first scraping, incl. non-numeric IDs/slugs
high_miss_ratio ≥ 50% 404/403/410 across ≥ 10 requests IDOR guessing — probing IDs that don't exist or aren't theirs

Events include the resource pattern, distinct-ID count, detected stride, miss counts and a sample of probed IDs. Each pattern fires once per IP per window, and SIEM_ENUM_AUTOBLOCK=true blocks the scanner outright. Tune thresholds in config('siem.enumeration').

Custom events

Custom sink drivers:

Blocklist API

IPs/CIDRs in siem.blocklist.never_block (health checks, offices, load balancer probes) can never be auto-blocked.

Event catalog

event.action Severity MITRE Emitted by
login_succeeded / login_failed / logout info / low / info T1078 / T1110 / — auth listener
user_registered, password_reset*, email_verified info–low — auth listener
auth_lockout high T1110 auth listener
honeypot_route_hit high T1595.003 honeypot routes
honeypot_form_triggered medium — siem.honeypot
brute_force_detected critical T1110 siem.abuse
scanning_detected high T1595.003 siem.abuse
rate_limit_abuse / endpoint_abuse medium / high T1595 siem.abuse
suspicious_input high T1190 siem.scan
resource_enumeration_detected high T1119 siem.enum
blocked_ip_attempt low — siem.block
anything via Siem::log() your choice — your code

Operational notes

Testing

License

MIT


All versions of gatekeeper with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
illuminate/support Version ^10.0|^11.0|^12.0|^13.0
illuminate/http Version ^10.0|^11.0|^12.0|^13.0
illuminate/contracts Version ^10.0|^11.0|^12.0|^13.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package inqaba-security/gatekeeper contains the following files

Loading the files please wait ...