Express.jsでエラーメッセージを隠す方法

Express.jsでエラーメッセージを隠す方法

Express.jsのエラーメッセージ

参考にしたのはExpress.js公式ページです。

Webアプリケーションを公開する際に不要なエラーメッセージを出力すると攻撃者に情報を与えてしまうため、セキュリティ上望ましくありません。

なのでエラーメッセージを隠します。基本的にはExpress.jsの機能でエラーハンドリングはできます。

Express.jsの404エラーでこんな感じです。

Not Found
404
NotFoundError: Not Found
at /Users/xxx/Desktop/test/app.js:27:8
at Layer.handle [as handle_request] (/Users/xxx/Desktop/test/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:317:13)
at /Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:335:12)
at next (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:275:10)
at /Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:635:15
at next (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:260:14)
at Function.handle (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:174:3)
at router (/Users/xxx/Desktop/test/node_modules/express/lib/router/index.js:47:12)

デフォルトのapp.jsでは404エラーを生成してデフォルトのError画面に遷移します。Node.jsって即バレですね。

productionモードの設定

EJSのerror.statusおよびerror.stackが出力されるのはNODE_ENVがdevelopmentの場合のみで、productionに設定しておけばエラーは表示されません。
公式ページにも書いてありました。

公式から抜粋↓

Set the environment variable NODE_ENV to production, to run the app in production mode.

私はpackage.jsonのscripts.startにNODE_ENV=productionを設定しました。
nodeのところをnodemonやforever startを使用していても動きます。

package.json
"scripts": {
"start": "NODE_ENV=production node ./bin/www"
},

404エラー

404エラーはわかりやすく表示させたいとかの場合は、ステータス404、メッセージを設定して新規画面を設定することもできます。

ExpressのFAQによると404はエラーではなく、ミドルウェアの機能として実行されるようです。
ルーティングできなかった扱い。そのため、errorやmessageは自分で設定します。

修正前

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

修正後

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  res.status(404);
  res.locals.error = {};
  res.render('error', {message: "404: The page was not found"});
});

最後に

ここまでで(というかほぼデフォルト設定)で変なエラーを出してしまうことはなくなるのではないかと。
ただ、コーディングの際にファイル名がないなど変なエラーを出してしまうとフォルダ構成が出てしまったりするので、そこはきちんと処理するようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ABOUT US

ケネ
はじめまして、ケネです。

Node.jsの技術情報を書いています。

一人でも多くの方と「自分でもできた」感覚を共有したいので、なるべくわかりやすく、実体験ベースでのブログを心がけています。
技術で自分の世界を広げましょう。

不明点や質問があればお気軽にコメントください。