跳至內容

IP 限制中介軟體

IP 限制中介軟體是一種根據使用者 IP 位址限制資源存取的 middleware。

匯入

ts
import { Hono } from 'hono'
import { ipRestriction } from 'hono/ip-restriction'

使用方式

對於在 Bun 上執行的應用程式,如果您只想允許從本機存取,可以寫成如下所示。 在 denyList 中指定您要拒絕的規則,在 allowList 中指定您要允許的規則。

ts
import { Hono } from 'hono'
import { getConnInfo } from 'hono/bun'
import { ipRestriction } from 'hono/ip-restriction'

const app = new Hono()

app.use(
  '*',
  ipRestriction(getConnInfo, {
    denyList: [],
    allowList: ['127.0.0.1', '::1'],
  })
)

app.get('/', (c) => c.text('Hello Hono!'))

將適合您環境的ConnInfo 輔助函式中的 getConninfo 作為 ipRestriction 的第一個參數傳遞。 例如,對於 Deno,它看起來會像這樣

ts
import { getConnInfo } from 'hono/deno'
import { ipRestriction } from 'hono/ip-restriction'

//...

app.use(
  '*',
  ipRestriction(getConnInfo, {
    // ...
  })
)

規則

請按照以下說明編寫規則。

IPv4

  • 192.168.2.0 - 靜態 IP 位址
  • 192.168.2.0/24 - CIDR 表示法
  • * - 所有位址

IPv6

  • ::1 - 靜態 IP 位址
  • ::1/10 - CIDR 表示法
  • * - 所有位址

錯誤處理

若要自訂錯誤,請在第三個參數中返回 Response

ts
app.use(
  '*',
  ipRestriction(
    getConnInfo,
    {
      denyList: ['192.168.2.0/24'],
    },
    async (remote, c) => {
      return c.text(`Blocking access from ${remote.addr}`, 403)
    }
  )
)

以 MIT 許可發布。