リクエストフィルタリングとは?初心者でもわかるようにバカにしながら徹底解説

目次

結論は?

ヴォリカ  INFRA副長

・アプリ本体(リビング)に通す前に、玄関で「きみ誰?」って身体検査する仕組み!

・これをサボるのは、泥棒に「鍵開いてますよ」って看板出してるのと同じ!

・要するに、ウェブアプリ界の頼れる門番のこと!

リクエストフィルタリングって結局何なの?

ヴォリカ  INFRA副長

リクエストフィルタリングとは、ウェブサーバーに届くHTTPリクエストを、実際にアプリケーション本体に渡す前にチェックしたり加工したりする仕組みのことだよ!

イメージで言うと、 お前んちのインターホンにピンポン鳴らしてきた人を、いきなりリビングに通すんじゃなくて、 「誰?何の用?怪しくね?」って一旦玄関で止めて、OKなら通す、NGなら追い返す。 それがリクエストフィルタリング。

なんでそんな面倒なことするの?

ヴォリカ  INFRA副長

「楽したい」「社会的に死にたくない」「邪魔されたくない」の3点があるよ!

  1. セキュリティ(社会的に死にたくない) ヤバい奴(XSSとか変な記号入れた攻撃とか)を玄関先で消毒するためを玄関先で消毒するため。 ノーガードでリビングに通してみろ、お前の大事なデータベース(家財道具)が盗まれて社会的に死ぬ
  2. 共通処理の集中(楽したい) 全ページで「ログインしてる?」ってコード書くとか正気の沙汰じゃない。 そんなコピペ作業が好きなのはドMだけだ。入口一箇所でチェックすれば、あとは寝てても安全。
  3. パフォーマンス(邪魔されたくない) アプリ本体は「ビジネスロジック」っていう高尚な仕事でお忙しいんだよ。 「圧縮? キャッシュ? ログ?」そんな下っ端の雑用は、全部フィルタという名の社畜にやらせとけ。

主な実装パターンとフレームワーク別で見てみよう

ヴォリカ  INFRA副長

難しく考える必要ないんだよ。 言語が違っても、やってることは「検問」一択だよ!

1. Java Servlet(昭和の頑固親父)

「基本にして究極」 javax.servlet.Filter を実装して、web.xml に書くだけ。枯れた技術ほど信用できるんだよ。「チェーン(鎖)で繋いで次へ渡す」って発想はここが元祖だ。

2. Spring Boot(今時のエリート)

「スマートに門前払い」 OncePerRequestFilter を使うのが主流。 コードでやってることは単純だぜ。「会員証(トークン)持ってねえなら帰れ(401)」。

3. その他(Node.js, Python, PHP…)

「名前変えても中身は同じ」 ExpressもDjangoもLaravelも、みんなカッコつけて「ミドルウェア」って呼んでるだけ。

  • app.use() (Node.js)
  • Middleware (Python/PHP)

どいつもこいつも、 「リクエスト → 【検問(ここ)】 → 本体」 この流れは世界共通。

フィルタの順番ってどう決まるの?

ヴォリカ  INFRA副長

「パンツ履いてからズボン」だよ。逆だと捕まるよ。

1. 設定方法(整理券を配れ) web.xml の行順だの @Order だの、やり方はあるが、要は「お前は1番、お前は2番」って番号札を貼り付ける作業だ。 これをサボると、フィルタ同士が入り口で押し合いへし合いして、アプリが学級崩壊する。

2. 失敗例(こうなったらアホ)

  • 認証より先にログ: 「誰かわからんけど誰か来た」って日記に書くのか? そのログ、誰得だよ。 まず身分証(認証)を確認させろ。名前がわかってから記録するのが筋だろ。
  • CORSの位置ミス: これは出口での挨拶みたいなもんだ。「他所から来た人も入っていいよー(許可)」って案内する役を、トイレの中に配置してどうする。一番外側に置け。

思考停止で適当に並べると、セキュリティホールという名の『全裸で外出』をやらかすことになる。

よくある使いどころベスト5

ヴォリカ  INFRA副長

「フィルタ界の神7(今回は5だけど)」だよ。 ここさえ押さえたら君のアプリは最低限の文明レベルを保てるよ!

  1. 認証・認可(門番) 「ID見せろ。持ってねえなら失せろ。」 JWTだのセッションだの、通行手形を持ってない不審者を秒速で追い返す係。
  2. ログ出力(監視カメラ) 「お前の行動、全部見てるからな。」 いつ、誰が、何しに来たか。全部記録して、後で何かあった時の「証拠」として残す。ストーカー並みの執念が必要。
  3. CORS対応(入国審査) 「よそのシマ(別ドメイン)から来た奴を通していいか?」 これやっとかないと、フロントエンド(React/Vueとか)が「アクセス拒否された!」って泣きついてくるぞ。
  4. リクエストボディの改変(美容外科) 「その汚ねぇデータを整形してやる。」 半角全角の統一とか、余計な空白の削除とか。アプリ本体に渡す前に、データをイケメンにしてやる優しさ。
  5. セキュリティヘッダー付与(装備係) 「裸で戦場に行くな、これを着ろ。」 ブラウザに変な気を起こさせないように、X-Frame-Options とかの防具を勝手に着せてあげる過保護機能。

注意点(失敗あるある)

ヴォリカ  INFRA副長

これぞ「初心者が踏む地雷」四天王だよ。 ここさえ避ければ君はインフラエンジニアだよ!

  1. 無限ループ(永遠のメリーゴーランド) 「ログインしてない? じゃあログイン画面へ」→(ログイン画面を表示するのにもフィルタ発動)→「お前ログインしてないな? ログイン画面へ」 ブラウザが「死ぬわ!」って悲鳴上げて落ちるぞ。
  2. パフォーマンス(受付で決算処理させるな) フィルタは「通過儀礼」だ。そこでDB叩きまくったり重い計算させたりすんな。 マンションの入口で、住人全員に確定申告させてみ。行列で玄関パンクするよ。
  3. 順番ミス(記憶喪失の記録係) さっきも言ったな。「認証」の前に「ログ」を書くな。 「誰かわからない人(null)が通りました」なんてログ、トイレットペーパーにもなりゃしねえ。
  4. Staticリソースも検査(壁紙に職質) CSSや画像ファイルにまで「お前は誰だ? 権限はあるか?」って聞くな。 ただの装飾だぞ。 警察がカーテンの柄にまで職務質問してたら税金の無駄だろ? スルーさせろ(除外設定)。

フィルタは『素早く、軽く、正確に』。余計なことしないこと

まとめ:リクエストフィルタリングはウェブアプリの「玄関マナー」

玄関で靴脱がない客をそのままリビングに通すバカはいない。 それと同じで、リクエストフィルタリングはウェブアプリの常識であり衛生

これをサボると、

  • セキュリティホール開け放ち
  • コードがスパゲティ化
  • パフォーマンスがゴミ化

初心者こそ、最初からちゃんとフィルタ(ミドルウェア)を使ってね。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITTIのアバター ITTI 運営長

ITTI運営長
調べものと学ぶことが止められなくなり、現在は以下の4ブログを運営中:
・DXブログ
・CODEブログ
・INFRAブログ(今ここ!)
・XRブログ

保有資格:ITパスポート
目標資格:情報処理安全確保支援士(学ぶこと多すぎて道のりは遠いですが、毎日コツコツ進めています…泣)

ブログでは、実務経験と最新技術を掛け合わせて、読者の「わかりにくい」を「わかる!」に変える記事を発信中!
最終目標は、これらの知識を活かして「ドラえもんのような万能AI」を開発すること(AIを副運営長任命が待ち遠しい!)。
DX・CODE・INFRA・XRに興味ある方、気軽にX(@llEqmDGOYZ4258)でDMください。一緒に学びましょう!

コメント

コメントする

CAPTCHA


目次