PHPackages                             sebastienheyd/hidden-captcha - 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. sebastienheyd/hidden-captcha

ActiveLibrary[Security](/categories/security)

sebastienheyd/hidden-captcha
============================

Fully hidden captcha for Laravel without reCaptcha

7.4.2(3y ago)44.1k↑151.5%1MITPHPPHP &gt;=5.6.4CI failing

Since Feb 3Pushed 3y ago3 watchersCompare

[ Source](https://github.com/sebastienheyd/hidden-captcha)[ Packagist](https://packagist.org/packages/sebastienheyd/hidden-captcha)[ RSS](/packages/sebastienheyd-hidden-captcha/feed)WikiDiscussions master Synced today

READMEChangelog (10)Dependencies (4)Versions (27)Used By (0)

Fully hidden captcha for Laravel without reCaptcha
==================================================

[](#fully-hidden-captcha-for-laravel-without-recaptcha)

[![Packagist](https://camo.githubusercontent.com/40db10644fa85957217a61ee390c10219abe6c8f45505062b1cfdc2b4457e35d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73656261737469656e686579642f68696464656e2d636170746368613f7374796c653d666c61742d737175617265)](https://packagist.org/packages/sebastienheyd/hidden-captcha)[![Build Status](https://camo.githubusercontent.com/ebc1d12d04cd3579fd45022ac23411a3a84efbc49c0c03a234ce6879c4aa0734/68747470733a2f2f7472617669732d63692e6f72672f73656261737469656e686579642f68696464656e2d636170746368612e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/sebastienheyd/hidden-captcha)[![StyleCI](https://camo.githubusercontent.com/bba4bd37378fa1a2b62b178b7f886cd82507cdba6468e1e92dc6aa748ff73d58/68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f35313030393131312f736869656c643f6272616e63683d6d6173746572)](https://github.styleci.io/repos/51009111)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/5c15d9e66e3bae266975f72a6ca489ceba5a165db6f0de91641af1285fea9972/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f73656261737469656e686579642f68696464656e2d636170746368612f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/sebastienheyd/hidden-captcha/?branch=master)[![Laravel](https://camo.githubusercontent.com/459ccdef6cf0b85320d27a016c9369260a3ae2bf6d6244c42fc3cf1df0f2102d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d2533453d352e342d677265656e3f6c6f676f3d4c61726176656c267374796c653d666c61742d737175617265)](https://laravel.com/)[![Nb downloads](https://camo.githubusercontent.com/e959b566323d6bf322b4e9b176c078660cd6ab83506167bf50fb1f0957f8b363/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73656261737469656e686579642f68696464656e2d636170746368612e737667)](https://packagist.org/packages/sebastienheyd/hidden-captcha)[![MIT License](https://camo.githubusercontent.com/da4c21c1e2fb5dc703412ba656392f104769d0754b9e1d72c9e0cd1f73d28235/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f73656261737469656e686579642f68696464656e2d636170746368613f7374796c653d666c61742d737175617265)](LICENSE)

Fully hidden spam protection solution for Laravel without reCaptcha. Based on several strategies to block the vast majority of spam bots without interfering with the user experience.

How does it work?
-----------------

[](#how-does-it-work)

HiddenCaptcha will use three checking rules to block spam robots :

- an encrypted token containing the user's IP, current session id, current user agent and a random string
- a randomly named required field (will use the random string in the token)
- a time limit (10 minutes by default)

The token is retrieved via an ajax call signed with sha256.

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

[](#installation)

```
composer require sebastienheyd/hidden-captcha

```

Publish public assets :

```
php artisan vendor:publish --tag=laravel-assets

```

Extra steps for Laravel &lt; 5.5 :

- Add `SebastienHeyd\HiddenCaptcha\HiddenCaptchaServiceProvider::class,` at the end of the `provider` array in `config/app.php`
- Add `"HiddenCaptcha" => SebastienHeyd\HiddenCaptcha\Facades\HiddenCaptcha::class,` at the end of the `aliases` array in `config/app.php`

Usage
-----

[](#usage)

In your forms, in the blade view :

```
@hiddencaptcha
```

To check your form, add the following validation rule:

```
'captcha' => 'hiddencaptcha'
```

Options
-------

[](#options)

#### Changing time limits

[](#changing-time-limits)

By default, the time limits for submitting a form are 0 second minimum to 1200 seconds maximum (10 minutes). Beyond that, hiddencaptcha will not validate the form.

These limits can be changed by declaring them in the validation rule, for example:

`$rules = ['captcha' => 'hiddencaptcha:5,2400'];`

You can also publish the configuration file to edit the default time limits :

```
php artisan vendor:publish --tag=captcha-config

```

Package update (Laravel &lt; 8.6.9)
-----------------------------------

[](#package-update-laravel--869)

Hidden-captcha comes with a JS who must be publish. Since you typically will need to overwrite the assets every time the package is updated, you may use the `--force` flag :

```
php artisan vendor:publish --tag=laravel-assets --force

```

To auto update assets each time package is updated, you can add this command to `post-update-cmd` into the file `composer.json` at the root of your project.

```
{
    "scripts": {
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --force --ansi"
        ]
    }
}
```

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity68

Established project with proven stability

 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 ~134 days

Recently: every ~282 days

Total

21

Last Release

1117d ago

Major Versions

1.1.0 → 5.5.x-dev2019-01-05

1.3.1 → 5.8.x-dev2019-03-23

5.8.x-dev → 6.0.02019-10-16

6.0.0 → 7.0.02019-12-15

PHP version history (5 changes)1.1.0PHP &gt;=5.6.0

5.8.x-devPHP &gt;=7.1.3

6.0.0PHP &gt;=7.2

7.1.0PHP &gt;=7.1

7.2.0PHP &gt;=5.6.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/9734baf9cf5aaf3f2243aa8a57e23e59f95b70f0bb30c2628f9e88bc76dc3c1a?d=identicon)[sebastienheyd](/maintainers/sebastienheyd)

---

Top Contributors

[![sebastienheyd](https://avatars.githubusercontent.com/u/5470423?v=4)](https://github.com/sebastienheyd "sebastienheyd (64 commits)")

---

Tags

botbotsbots-protectioncaptchainvisible-captchalaravelspamlaravelcaptchahiddeninvisible

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/sebastienheyd-hidden-captcha/health.svg)

```
[![Health](https://phpackages.com/badges/sebastienheyd-hidden-captcha/health.svg)](https://phpackages.com/packages/sebastienheyd-hidden-captcha)
```

###  Alternatives

[unopim/unopim

UnoPim Laravel PIM

10.5k2.4k](/packages/unopim-unopim)[api-platform/laravel

API Platform support for Laravel

58171.5k14](/packages/api-platform-laravel)[ecotone/laravel

Ecotone for Laravel — CQRS, Event Sourcing, Sagas, Durable Workflows, and Outbox on top of Laravel Queue, via PHP attributes.

21318.6k3](/packages/ecotone-laravel)

PHPackages © 2026

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