ブログBlog

Webアプリのエラーチェックに関してまとめてみました

投稿日:2022年03月09日 テクノロジー

こんにちは、江宮です!

Webシステムのコードを書いていると、関数の中の半分以上がエラーチェック処理やないかと最近よく感じます。

もしフレームワークのバリデーション機能がなかったとしたら、処理関数のほとんどがエラーチェック処理ばかりのことも多いでしょう。

バグを防ぐためには不正なデータがないか、常に判定する必要があります。

チェックすべきことがたくさんあるので、分類化してみました。


権限チェック

セッション等に保存されているアクセス権限データを判定します。

例えば編集権限を持っていないユーザが、登録や編集画面にアクセスすると不正になります。

通常の処理フローでは起こりえないので、他の処理が始まる前に処理を中断させます。


必須チェック

入力/選択の有無を判定します。


文字数チェック

規定(範囲)の文字数であるか判定します。

HTMLのminlengthやmaxlength属性は改ざん可能なので、バックエンドでの文字数判定は必須です。


形式チェック

数値なら整数か小数か、日付ならハイフン区切りなのか前0埋めされているかなど、後続の処理形式に合っているか判定します。

小数型から整数型など、範囲の狭い型のカラムへと入れると、エラーの発生がないまま四捨五入されてDBに保存されることもあるので、注意が必要です。


存在チェック

登録時や更新時の重複チェックとして、ログインIDなど一意であるべきデータが、既にDBに登録されているか判定し、重複する場合は再入力を促します。

また更新時や削除時のIDチェックとして、これから編集するデータのIDがDBに未登録であるとデータ改ざんと見なし、処理を中断させます。


相関性チェック

例えば一つ目の選択肢Aを選択すると、二つ目の選択肢1と選択肢2しか選択できないような仕様で、選択肢1,2が間違いなく選択されているかを判定します。


妥当性・整合性チェック

予約サイトで過去の日付を予約しようとしていないか、ECサイトの購入金額と商品金額が等しいかなどを判定します。


関連性チェック

A社の扱っているB商品を、購入権限のないC氏が購入しようとしていないかなど、システムのルールに合致しているか判定します。

テーブル同士の関連有無はもとより、ルールが多くなるほどチェックも複雑化します。


まとめ

ブラウザからパラメータの改ざんは簡単です。

プロジェクトの方針や処理パフォーマンスを考慮しながら、今後も可能な限りバグを発生させないような実装を心掛けていきたいと思います!
PAGE TOP