PHPackages                             hongliang/defender - 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. hongliang/defender

ActiveApplication[Security](/categories/security)

hongliang/defender
==================

Defend your site from malicious scans

v0.2.6(7y ago)31222MITPHP

Since Mar 25Pushed 7y ago2 watchersCompare

[ Source](https://github.com/h-wang/defender)[ Packagist](https://packagist.org/packages/hongliang/defender)[ Docs](https://github.com/h-wang/defender)[ RSS](/packages/hongliang-defender/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (8)DependenciesVersions (9)Used By (0)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/e34c7c380b41d55931423d0985d81656835f5542b77e64035cd4dc6a2698ce22/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f682d77616e672f646566656e6465722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/h-wang/defender/?branch=master)[![Build Status](https://camo.githubusercontent.com/3c37f9a3a5563ea381e4c6419bf2047402f8f650dae7df521c05189fd54b64f0/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f682d77616e672f646566656e6465722f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/h-wang/defender/build-status/master)

Defender
========

[](#defender)

Defend your site from malicious scans. It works with defense voters. Currently request URI keyword and IP range defense voters are supported.

Installation
------------

[](#installation)

Install via composer

```
composer require hongliang/defender

```

How it works
------------

[](#how-it-works)

If you are running a Silex or Symfony application, the following code should be injected after the autoload but before the routers. Otherwise it will trigger an undefined route exception.

The simple way:

```
\Hongliang\Defender\Defender::defend();
```

The customized way:

```
use Hongliang\Defender\Defender;
use Hongliang\Defender\Voter\IpRangeVoter;
use Hongliang\Defender\Voter\UriKeywordVoter;

$defender = new Defender();
$defender->addVoter(new IpRangeVoter())
    ->addVoter(new UriKeywordVoter())
    ->react();
```

Customize to your own needs:

```
use Hongliang\Defender\Defender;
use Hongliang\Defender\Voter\IpRangeVoter;
use Hongliang\Defender\Voter\UriKeywordVoter;
use Hongliang\Defender\Voter\SpiderVoter;

// it's possible to customize the level of reaction as the 2nd parameter of addVoter()
// it's possible to set a URL to redirect to when the level is revenge or higher. By default it's localhost
$defender = new Defender();
$defender->addVoter(new IpRangeVoter(), Defender::FORBIDDEN)
    ->addVoter(new UriKeywordVoter(), Defender::REVENGE)
    ->addVoter(new SpiderVoter(), Defender::DENY)
    ->setRedirectUrl('http://www.google.com')
    ->react();
```

More advanced use:

```
use Hongliang\Defender\Defender;
use Hongliang\Defender\Voter\IpRangeVoter;
use Hongliang\Defender\Voter\UriKeywordVoter;
use Hongliang\Defender\Voter\SpiderVoter;

$voter = new UriKeywordVoter();
$voter->setAssets(['fckedit', '/wp-']);
$ipVoter = new IpRangeVoter();
$ipVoter->setAssets([['0.0.0.0', '255.255.255.255']]);

$spiderVoter = new SpiderVoter();
$spiderVoter->setAssets(['Baiduspider', '360spider']);

$defender = new Defender();
$defender->addVoter($ipVoter, Defender::FORBIDDEN)
    ->addVoter($voter, Defender::DENY)
    ->addVoter($spiderVoter, Defender::DENY)
    ->react();
```

TODO
----

[](#todo)

- Separate IP ranges into separate file or even external resource
- Build IP ranges into long integer for better performance
- Support logging and log everything that's above the normal level
- Separate URI keywords into categories, e.g. Wordpress, Joomla. This way it's possible to be used in those CMSes.

###  Health Score

29

—

LowBetter than 60% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 95.5% 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 ~119 days

Recently: every ~204 days

Total

8

Last Release

2859d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/1b784da6e9b890f576cd3cac29511978c10afc0e3b9572b498f2841952d953ef?d=identicon)[h-wang](/maintainers/h-wang)

---

Top Contributors

[![h-wang](https://avatars.githubusercontent.com/u/3410322?v=4)](https://github.com/h-wang "h-wang (21 commits)")[![congpeijun](https://avatars.githubusercontent.com/u/881552?v=4)](https://github.com/congpeijun "congpeijun (1 commits)")

---

Tags

securitybotscandefenderHongliang

### Embed Badge

![Health badge](/badges/hongliang-defender/health.svg)

```
[![Health](https://phpackages.com/badges/hongliang-defender/health.svg)](https://phpackages.com/packages/hongliang-defender)
```

###  Alternatives

[phpseclib/phpseclib

PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.

5.6k434.8M1.3k](/packages/phpseclib-phpseclib)[defuse/php-encryption

Secure PHP Encryption Library

3.9k162.4M212](/packages/defuse-php-encryption)[mews/purifier

Laravel 5/6/7/8/9/10 HtmlPurifier Package

2.0k16.7M112](/packages/mews-purifier)[gregwar/captcha-bundle

Captcha bundle

3524.7M32](/packages/gregwar-captcha-bundle)[robrichards/xmlseclibs

A PHP library for XML Security

41278.1M118](/packages/robrichards-xmlseclibs)[spatie/laravel-csp

Add CSP headers to the responses of a Laravel app

8519.6M19](/packages/spatie-laravel-csp)

PHPackages © 2026

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