hono-honeypot 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +202 -0
- package/dist/index.cjs +7 -0
- package/dist/index.d.cts +88 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.js +7 -0
- package/package.json +66 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Abhi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# hono-honeypot
|
|
2
|
+
|
|
3
|
+
> Lightweight security middleware for Hono.js - block bots and vulnerability scanners with zero dependencies
|
|
4
|
+
|
|
5
|
+
Protect your Hono applications from WordPress attacks, PHP exploits, and brute-force attempts with this edge-ready honeypot middleware. Works seamlessly on Cloudflare Workers, Bun, Deno, and Node.js runtimes. Returns `410 Gone` for faster search engine deindexing and reduced bot retry attempts.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- ✅ **Zero dependencies** - Pure TypeScript pattern matching, no external libraries or runtime requirements
|
|
10
|
+
- ⚡ **<1ms execution** - Early termination firewall logic with minimal CPU overhead
|
|
11
|
+
- 🛡️ **Production-ready** - Blocks 80+ common web scraper and vulnerability scanner patterns
|
|
12
|
+
- 🌍 **Universal edge support** - Deploy on Cloudflare Workers, Bun, Deno, Vercel Edge, Node.js
|
|
13
|
+
- 🔧 **Customizable** - Add custom patterns or exclude built-in rules for your use case
|
|
14
|
+
- 🚀 **SEO-friendly** - Uses 410 Gone status for faster Google/Bing deindexing
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install hono-honeypot
|
|
20
|
+
# or
|
|
21
|
+
pnpm add hono-honeypot
|
|
22
|
+
# or
|
|
23
|
+
bun add hono-honeypot
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
### Basic Setup
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { Hono } from 'hono'
|
|
32
|
+
import { honeypot } from 'hono-honeypot'
|
|
33
|
+
|
|
34
|
+
const app = new Hono()
|
|
35
|
+
|
|
36
|
+
// Apply globally (recommended - place early in middleware chain)
|
|
37
|
+
app.use('*', honeypot())
|
|
38
|
+
|
|
39
|
+
app.get('/', (c) => c.text('Hello!'))
|
|
40
|
+
|
|
41
|
+
export default app
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### With Options
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
import { honeypot } from 'hono-honeypot'
|
|
48
|
+
|
|
49
|
+
app.use('*', honeypot({
|
|
50
|
+
// Add custom attack patterns to block
|
|
51
|
+
patterns: [
|
|
52
|
+
/^\/custom-admin/i,
|
|
53
|
+
/^\/secret/i,
|
|
54
|
+
],
|
|
55
|
+
|
|
56
|
+
// Exclude built-in patterns (e.g., allow /admin for your own routes)
|
|
57
|
+
exclude: [
|
|
58
|
+
/^\/admin$/i, // Allow /admin but still block other admin patterns
|
|
59
|
+
],
|
|
60
|
+
|
|
61
|
+
// Enable request logging (default: true)
|
|
62
|
+
log: true,
|
|
63
|
+
|
|
64
|
+
// HTTP status code (default: 410 Gone for faster bot deterrence)
|
|
65
|
+
status: 410, // or 403 Forbidden, 404 Not Found
|
|
66
|
+
}))
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Protect Specific Routes
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
// Only protect API routes
|
|
73
|
+
app.use('/api/*', honeypot())
|
|
74
|
+
|
|
75
|
+
// Exclude certain paths
|
|
76
|
+
app.use('*', async (c, next) => {
|
|
77
|
+
if (c.req.path.startsWith('/public')) {
|
|
78
|
+
return next()
|
|
79
|
+
}
|
|
80
|
+
return honeypot()(c, next)
|
|
81
|
+
})
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## What It Blocks
|
|
85
|
+
|
|
86
|
+
Intercepts 80+ common attack vectors including:
|
|
87
|
+
|
|
88
|
+
- **PHP vulnerability scanners**: `*.php`, `/phpinfo`, `/config.php`, `/eval-stdin.php`
|
|
89
|
+
- **WordPress brute force**: `/wp-admin`, `/wp-login.php`, `/xmlrpc.php`, `/wp-config.php`
|
|
90
|
+
- **Admin panel enumeration**: `/admin`, `/phpmyadmin`, `/cpanel`, `/cgi-bin`
|
|
91
|
+
- **CMS framework exploits**: `/typo3`, `/joomla`, `/drupal`, `/magento`
|
|
92
|
+
- **Sensitive file probing**: `/.env`, `/.git`, `*.sql`, `/node_modules`, `/database.yml`
|
|
93
|
+
- **Backup file discovery**: `/backup`, `/old`, `/test`, `/demo`, `/temp`
|
|
94
|
+
- **Auth endpoint scanning**: `/login`, `/register`, `/dashboard` (exact matches only)
|
|
95
|
+
- **Directory brute force**: `/2017`, `/2018`, etc. (year-based folder guessing)
|
|
96
|
+
- **Web shell detection**: `/shell.php`, `/c99.php`, `/r57.php`
|
|
97
|
+
|
|
98
|
+
**Smart anchoring prevents false positives:**
|
|
99
|
+
- ✅ Blocks `/admin` but allows `/api/admin`
|
|
100
|
+
- ✅ Blocks `/blog` but allows `/blogs`
|
|
101
|
+
- ✅ Blocks `/login` but allows `/api/auth/login`
|
|
102
|
+
|
|
103
|
+
## Why 410 Gone?
|
|
104
|
+
|
|
105
|
+
Returns `410 Gone` (not `404 Not Found`) for better bot deterrence and SEO hygiene:
|
|
106
|
+
|
|
107
|
+
- **Search engine optimization**: Google and Bing prioritize `410` responses for permanent removal from search indexes
|
|
108
|
+
- **Bot mitigation**: Web scrapers and vulnerability scanners stop retrying sooner, reducing server load
|
|
109
|
+
- **Bandwidth savings**: Empty response body conserves bandwidth during high-volume DDoS-style attacks
|
|
110
|
+
- **Security best practice**: Signals permanent unavailability, not temporary 404 errors that encourage retry logic
|
|
111
|
+
|
|
112
|
+
## Configuration
|
|
113
|
+
|
|
114
|
+
### Options API
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
interface HoneypotOptions {
|
|
118
|
+
/**
|
|
119
|
+
* Add custom attack patterns to block (e.g., /internal, /private)
|
|
120
|
+
* Merged with built-in 80+ patterns
|
|
121
|
+
*/
|
|
122
|
+
patterns?: RegExp[]
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Exclude specific built-in patterns (e.g., allow /admin for your own routes)
|
|
126
|
+
* Useful when you need legitimate routes that match attack patterns
|
|
127
|
+
*/
|
|
128
|
+
exclude?: RegExp[]
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Log blocked requests to console with 🍯 emoji and IP address
|
|
132
|
+
* @default true
|
|
133
|
+
*/
|
|
134
|
+
log?: boolean
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* HTTP status code to return for blocked requests
|
|
138
|
+
* @default 410 - 410 Gone (fastest bot deterrence + search engine deindexing)
|
|
139
|
+
* 404 - Not Found (standard but encourages bot retries)
|
|
140
|
+
* 403 - Forbidden (signals authentication issue, may trigger escalation)
|
|
141
|
+
*/
|
|
142
|
+
status?: 410 | 404 | 403
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Logging Output
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
🍯 Blocked [192.168.1.1] GET /wp-admin
|
|
150
|
+
🍯 Blocked [203.0.113.5] POST /phpmyadmin
|
|
151
|
+
🍯 Blocked [198.51.100.42] HEAD /backup
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Performance
|
|
155
|
+
|
|
156
|
+
- **Overhead**: <1ms per request
|
|
157
|
+
- **Memory**: ~8KB (pattern array)
|
|
158
|
+
- **CPU**: Minimal (regex matching, short-circuits on first match)
|
|
159
|
+
|
|
160
|
+
## Best Practices
|
|
161
|
+
|
|
162
|
+
1. **Place early** in middleware chain (before rate limiters, authentication, and business logic)
|
|
163
|
+
2. **Use exclude option** if you have legitimate routes matching attack patterns (e.g., `/admin` dashboard)
|
|
164
|
+
3. **Test thoroughly** with your application routes to prevent false positives blocking real users
|
|
165
|
+
4. **Monitor logs** in staging/production to identify new attack vectors and emerging bot patterns
|
|
166
|
+
5. **Add custom patterns** specific to your application architecture (internal endpoints, legacy routes)
|
|
167
|
+
6. **Combine with rate limiting** for defense-in-depth security strategy
|
|
168
|
+
7. **Review periodically** to update patterns as new vulnerabilities and scanning techniques emerge
|
|
169
|
+
|
|
170
|
+
## Framework Compatibility
|
|
171
|
+
|
|
172
|
+
Works with all Hono.js runtimes:
|
|
173
|
+
|
|
174
|
+
- ✅ Cloudflare Workers
|
|
175
|
+
- ✅ Bun
|
|
176
|
+
- ✅ Deno
|
|
177
|
+
- ✅ Node.js
|
|
178
|
+
- ✅ Vercel Edge Functions
|
|
179
|
+
- ✅ Fastly Compute
|
|
180
|
+
|
|
181
|
+
## Migration from Express
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
// Before (Express)
|
|
185
|
+
app.use((req, res, next) => {
|
|
186
|
+
if (req.path.includes('wp-admin')) {
|
|
187
|
+
return res.status(410).end()
|
|
188
|
+
}
|
|
189
|
+
next()
|
|
190
|
+
})
|
|
191
|
+
|
|
192
|
+
// After (Hono)
|
|
193
|
+
app.use('*', honeypot())
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Contributing
|
|
197
|
+
|
|
198
|
+
Issues and PRs welcome at [github.com/ph33nx/hono-honeypot](https://github.com/ph33nx/hono-honeypot)
|
|
199
|
+
|
|
200
|
+
## License
|
|
201
|
+
|
|
202
|
+
MIT © [ph33nx](https://github.com/ph33nx)
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
'use strict';var factory=require('hono/factory');var a=[/\.php$/i,/\/config\.php/i,/\/phpinfo/i,/\/eval-stdin\.php/i,/\/xmlrpc\.php/i,/^\/wp$/i,/^\/wp-/i,/^\/wordpress/i,/^\/admin(\.php)?$/i,/^\/administrator/i,/^\/phpmyadmin/i,/^\/cpanel/i,/^\/whm/i,/^\/cgi-bin/i,/^\/typo3/i,/^\/joomla/i,/^\/drupal/i,/^\/magento/i,/\/\.env/i,/\/\.git/i,/\/\.sql$/i,/\/\.well-known\/security\.txt/i,/\/(vendor|node_modules)\//i,/^\/backup/i,/^\/bk$/i,/^\/bak$/i,/^\/bac$/i,/^\/dump/i,/^\/db_/i,/^\/sql/i,/^\/shell/i,/^\/login$/i,/^\/signin$/i,/^\/register$/i,/^\/signup$/i,/^\/dashboard$/i,/^\/user\/(login|signin|register|signup)/i,/^\/old$/i,/^\/new$/i,/^\/test$/i,/^\/demo$/i,/^\/www$/i,/^\/main$/i,/^\/site$/i,/^\/shop$/i,/^\/blog$/i,/^\/bc$/i,/^\/sitio$/i,/^\/sito$/i,/^\/oldsite$/i,/^\/old-site$/i,/^\/\d{4}$/i],$=(e={})=>{let t=[...a,...e.patterns||[]];e.exclude?.length&&(t=t.filter(i=>!e.exclude.some(o=>i.source===o.source)));let s=e.log??true,p=e.status??410;return factory.createMiddleware(async(i,o)=>{let r=i.req.path;if(t.some(n=>n.test(r))){if(s){let n=i.req.header("cf-connecting-ip")||i.req.header("x-forwarded-for")?.split(",")[0]?.trim()||i.req.header("x-real-ip")||"unknown";console.log(`\u{1F36F} Blocked [${n}] ${i.req.method} ${r}`);}return i.body(null,p)}return o()})};/**
|
|
2
|
+
* hono-honeypot - Zero-dependency security middleware for Hono.js
|
|
3
|
+
* Blocks bot attacks, vulnerability scanners, and brute-force attempts
|
|
4
|
+
*
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @author ph33nx <https://github.com/ph33nx>
|
|
7
|
+
*/exports.honeypot=$;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as hono_types from 'hono/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* hono-honeypot - Zero-dependency security middleware for Hono.js
|
|
5
|
+
* Blocks bot attacks, vulnerability scanners, and brute-force attempts
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
* @author ph33nx <https://github.com/ph33nx>
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Configuration options for honeypot middleware
|
|
12
|
+
*/
|
|
13
|
+
interface HoneypotOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Add custom attack patterns to block (merged with built-in patterns)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* patterns: [
|
|
20
|
+
* /^\/custom-admin/i, // Block /custom-admin
|
|
21
|
+
* /^\/internal/i, // Block /internal
|
|
22
|
+
* ]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
patterns?: RegExp[];
|
|
26
|
+
/**
|
|
27
|
+
* Exclude specific built-in patterns (useful for allowing legitimate routes)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* // Allow your own /admin dashboard but keep other admin patterns blocked
|
|
32
|
+
* exclude: [/^\/admin$/i]
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
exclude?: RegExp[];
|
|
36
|
+
/**
|
|
37
|
+
* Log blocked requests to console with 🍯 emoji and client IP
|
|
38
|
+
*
|
|
39
|
+
* @default true
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* Output: `🍯 Blocked [192.168.1.1] GET /wp-admin`
|
|
43
|
+
*/
|
|
44
|
+
log?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* HTTP status code to return for blocked requests
|
|
47
|
+
*
|
|
48
|
+
* @default 410 Gone (fastest bot deterrence + search engine deindexing)
|
|
49
|
+
*
|
|
50
|
+
* - **410 Gone**: Signals permanent removal, bots stop retrying faster, Google/Bing prioritize for index removal
|
|
51
|
+
* - **404 Not Found**: Standard response but encourages bot retry logic
|
|
52
|
+
* - **403 Forbidden**: May trigger escalation attempts by sophisticated scanners
|
|
53
|
+
*/
|
|
54
|
+
status?: 410 | 404 | 403;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create honeypot middleware to block bot attacks and vulnerability scanners
|
|
58
|
+
*
|
|
59
|
+
* Intercepts 80+ common attack patterns (WordPress, PHP, admin panels, etc.) before they reach your route handlers.
|
|
60
|
+
* Returns 410 Gone by default for faster search engine deindexing and bot deterrence.
|
|
61
|
+
*
|
|
62
|
+
* @param options - Configuration for custom patterns, exclusions, logging, and status code
|
|
63
|
+
* @returns Hono middleware handler
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* Basic usage (blocks all built-in patterns)
|
|
67
|
+
* ```ts
|
|
68
|
+
* import { Hono } from 'hono'
|
|
69
|
+
* import { honeypot } from 'hono-honeypot'
|
|
70
|
+
*
|
|
71
|
+
* const app = new Hono()
|
|
72
|
+
* app.use('*', honeypot())
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* With custom patterns and exclusions
|
|
77
|
+
* ```ts
|
|
78
|
+
* app.use('*', honeypot({
|
|
79
|
+
* patterns: [/^\/secret/i], // Add custom pattern
|
|
80
|
+
* exclude: [/^\/admin$/i], // Allow your /admin route
|
|
81
|
+
* log: true, // Enable logging
|
|
82
|
+
* status: 410 // Return 410 Gone
|
|
83
|
+
* }))
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
declare const honeypot: (options?: HoneypotOptions) => hono_types.MiddlewareHandler<any, string, {}, Response & hono_types.TypedResponse<null, 410 | 404 | 403, "body">>;
|
|
87
|
+
|
|
88
|
+
export { type HoneypotOptions, honeypot };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as hono_types from 'hono/types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* hono-honeypot - Zero-dependency security middleware for Hono.js
|
|
5
|
+
* Blocks bot attacks, vulnerability scanners, and brute-force attempts
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
* @author ph33nx <https://github.com/ph33nx>
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Configuration options for honeypot middleware
|
|
12
|
+
*/
|
|
13
|
+
interface HoneypotOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Add custom attack patterns to block (merged with built-in patterns)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* patterns: [
|
|
20
|
+
* /^\/custom-admin/i, // Block /custom-admin
|
|
21
|
+
* /^\/internal/i, // Block /internal
|
|
22
|
+
* ]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
patterns?: RegExp[];
|
|
26
|
+
/**
|
|
27
|
+
* Exclude specific built-in patterns (useful for allowing legitimate routes)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* // Allow your own /admin dashboard but keep other admin patterns blocked
|
|
32
|
+
* exclude: [/^\/admin$/i]
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
exclude?: RegExp[];
|
|
36
|
+
/**
|
|
37
|
+
* Log blocked requests to console with 🍯 emoji and client IP
|
|
38
|
+
*
|
|
39
|
+
* @default true
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* Output: `🍯 Blocked [192.168.1.1] GET /wp-admin`
|
|
43
|
+
*/
|
|
44
|
+
log?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* HTTP status code to return for blocked requests
|
|
47
|
+
*
|
|
48
|
+
* @default 410 Gone (fastest bot deterrence + search engine deindexing)
|
|
49
|
+
*
|
|
50
|
+
* - **410 Gone**: Signals permanent removal, bots stop retrying faster, Google/Bing prioritize for index removal
|
|
51
|
+
* - **404 Not Found**: Standard response but encourages bot retry logic
|
|
52
|
+
* - **403 Forbidden**: May trigger escalation attempts by sophisticated scanners
|
|
53
|
+
*/
|
|
54
|
+
status?: 410 | 404 | 403;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create honeypot middleware to block bot attacks and vulnerability scanners
|
|
58
|
+
*
|
|
59
|
+
* Intercepts 80+ common attack patterns (WordPress, PHP, admin panels, etc.) before they reach your route handlers.
|
|
60
|
+
* Returns 410 Gone by default for faster search engine deindexing and bot deterrence.
|
|
61
|
+
*
|
|
62
|
+
* @param options - Configuration for custom patterns, exclusions, logging, and status code
|
|
63
|
+
* @returns Hono middleware handler
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* Basic usage (blocks all built-in patterns)
|
|
67
|
+
* ```ts
|
|
68
|
+
* import { Hono } from 'hono'
|
|
69
|
+
* import { honeypot } from 'hono-honeypot'
|
|
70
|
+
*
|
|
71
|
+
* const app = new Hono()
|
|
72
|
+
* app.use('*', honeypot())
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* With custom patterns and exclusions
|
|
77
|
+
* ```ts
|
|
78
|
+
* app.use('*', honeypot({
|
|
79
|
+
* patterns: [/^\/secret/i], // Add custom pattern
|
|
80
|
+
* exclude: [/^\/admin$/i], // Allow your /admin route
|
|
81
|
+
* log: true, // Enable logging
|
|
82
|
+
* status: 410 // Return 410 Gone
|
|
83
|
+
* }))
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
declare const honeypot: (options?: HoneypotOptions) => hono_types.MiddlewareHandler<any, string, {}, Response & hono_types.TypedResponse<null, 410 | 404 | 403, "body">>;
|
|
87
|
+
|
|
88
|
+
export { type HoneypotOptions, honeypot };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import {createMiddleware}from'hono/factory';var a=[/\.php$/i,/\/config\.php/i,/\/phpinfo/i,/\/eval-stdin\.php/i,/\/xmlrpc\.php/i,/^\/wp$/i,/^\/wp-/i,/^\/wordpress/i,/^\/admin(\.php)?$/i,/^\/administrator/i,/^\/phpmyadmin/i,/^\/cpanel/i,/^\/whm/i,/^\/cgi-bin/i,/^\/typo3/i,/^\/joomla/i,/^\/drupal/i,/^\/magento/i,/\/\.env/i,/\/\.git/i,/\/\.sql$/i,/\/\.well-known\/security\.txt/i,/\/(vendor|node_modules)\//i,/^\/backup/i,/^\/bk$/i,/^\/bak$/i,/^\/bac$/i,/^\/dump/i,/^\/db_/i,/^\/sql/i,/^\/shell/i,/^\/login$/i,/^\/signin$/i,/^\/register$/i,/^\/signup$/i,/^\/dashboard$/i,/^\/user\/(login|signin|register|signup)/i,/^\/old$/i,/^\/new$/i,/^\/test$/i,/^\/demo$/i,/^\/www$/i,/^\/main$/i,/^\/site$/i,/^\/shop$/i,/^\/blog$/i,/^\/bc$/i,/^\/sitio$/i,/^\/sito$/i,/^\/oldsite$/i,/^\/old-site$/i,/^\/\d{4}$/i],$=(e={})=>{let t=[...a,...e.patterns||[]];e.exclude?.length&&(t=t.filter(i=>!e.exclude.some(o=>i.source===o.source)));let s=e.log??true,p=e.status??410;return createMiddleware(async(i,o)=>{let r=i.req.path;if(t.some(n=>n.test(r))){if(s){let n=i.req.header("cf-connecting-ip")||i.req.header("x-forwarded-for")?.split(",")[0]?.trim()||i.req.header("x-real-ip")||"unknown";console.log(`\u{1F36F} Blocked [${n}] ${i.req.method} ${r}`);}return i.body(null,p)}return o()})};/**
|
|
2
|
+
* hono-honeypot - Zero-dependency security middleware for Hono.js
|
|
3
|
+
* Blocks bot attacks, vulnerability scanners, and brute-force attempts
|
|
4
|
+
*
|
|
5
|
+
* @license MIT
|
|
6
|
+
* @author ph33nx <https://github.com/ph33nx>
|
|
7
|
+
*/export{$ as honeypot};
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "hono-honeypot",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Zero-dependency honeypot middleware for Hono.js that blocks bot attacks and vulnerability scanners",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"require": {
|
|
16
|
+
"types": "./dist/index.d.cts",
|
|
17
|
+
"default": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE"
|
|
25
|
+
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsup",
|
|
28
|
+
"test": "vitest run",
|
|
29
|
+
"prepublishOnly": "bun run build && bun test"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"hono",
|
|
33
|
+
"middleware",
|
|
34
|
+
"honeypot",
|
|
35
|
+
"security",
|
|
36
|
+
"bot-protection",
|
|
37
|
+
"firewall",
|
|
38
|
+
"cloudflare-workers",
|
|
39
|
+
"bun",
|
|
40
|
+
"deno",
|
|
41
|
+
"edge"
|
|
42
|
+
],
|
|
43
|
+
"author": "ph33nx (https://github.com/ph33nx)",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/ph33nx/hono-honeypot.git"
|
|
48
|
+
},
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/ph33nx/hono-honeypot/issues"
|
|
51
|
+
},
|
|
52
|
+
"homepage": "https://github.com/ph33nx/hono-honeypot#readme",
|
|
53
|
+
"peerDependencies": {
|
|
54
|
+
"hono": "^4.0.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/bun": "^1.3.5",
|
|
58
|
+
"hono": "^4.11.3",
|
|
59
|
+
"tsup": "^8.5.1",
|
|
60
|
+
"typescript": "^5.9.3",
|
|
61
|
+
"vitest": "^4.0.16"
|
|
62
|
+
},
|
|
63
|
+
"engines": {
|
|
64
|
+
"node": ">=18"
|
|
65
|
+
}
|
|
66
|
+
}
|