PHPackages                             augustash/ash\_facet\_protection - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. augustash/ash\_facet\_protection

ActiveDrupal-custom-module[Security](/categories/security)

augustash/ash\_facet\_protection
================================

Protects Drupal sites from bot abuse of faceted search URLs

1.0.3(4mo ago)010proprietaryPHP

Since Apr 1Pushed 4mo ago1 watchersCompare

[ Source](https://github.com/augustash/drupal-facet-protection)[ Packagist](https://packagist.org/packages/augustash/ash_facet_protection)[ Docs](https://github.com/augustash/drupal-facet-protection)[ RSS](/packages/augustash-ash-facet-protection/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (2)Versions (5)Used By (0)

Facet Protection
================

[](#facet-protection)

Protects Drupal sites from bot abuse of faceted search URLs. Bots systematically crawl every combination of facet filter parameters, generating expensive uncached queries and bloating database cache tables.

What it does
------------

[](#what-it-does)

- **Validates facet aliases** — rejects requests using facet parameters that don't match any configured facet on the site (400 response). Valid aliases are cached and auto-invalidate when facet config changes.
- **Throttles faceted requests** — blocks requests with more than 8 facet parameters (429 response)
- **Rate limits per IP** — 30 faceted requests per minute per IP
- **Strips tracking params** — removes `srsltid` and similar params that fragment cache keys
- **Blocks crawling** — appends `robots.txt` rules to disallow faceted URLs via Composer Scaffold

All checks run as lightweight HTTP middleware before Drupal fully bootstraps. Invalid alias requests are rejected before they consume rate limit slots.

Setup
-----

[](#setup)

```
composer config --json --merge extra.drupal-scaffold.allowed-packages '["augustash/ash_facet_protection"]' && composer require augustash/ash_facet_protection
```

Then enable the module:

```
drush en ash_facet_protection
```

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance78

Regular maintenance activity

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

4

Last Release

122d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/58f09f3094dbf20ec7c4e7539132ab26b92f16b4aad1aed8812740383ca2af18?d=identicon)[kazajhodo](/maintainers/kazajhodo)

---

Top Contributors

[![kazajhodo](https://avatars.githubusercontent.com/u/1173204?v=4)](https://github.com/kazajhodo "kazajhodo (6 commits)")

### Embed Badge

![Health badge](/badges/augustash-ash-facet-protection/health.svg)

```
[![Health](https://phpackages.com/badges/augustash-ash-facet-protection/health.svg)](https://phpackages.com/packages/augustash-ash-facet-protection)
```

###  Alternatives

[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6943.5M448](/packages/drupal-core-recommended)[farmos/farmos

A web-based farm record keeping application.

1.3k7.3k1](/packages/farmos-farmos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
