URLパラメータをテストするときの勘所
この記事はソフトウェアテストの小ネタ Advent Calendar 2023 5日目の記事です。
WebアプリケーションやAPIの一番最初の窓口になるURLですが、今まで開発やテストをしてきた際にそこからバグを見つけたことも多いので、今回はテストするときの勘所についてまとめてみたいと思います。
少しでも参考になれば幸いです。
URLパラメータとは
https://www.example.com/users/12345?a=hoge&b=9999&c=true
このような形式のURLを見たことがあるという方は多いと思います。具体的には以下のような種類のパラメータがあります。
パスパラメータ
12345
この部分のことになります。同じ種類のページが表示されるけれども、この数字や文字列によって表示される内容が異なるという場合、ここの値によって表示の内容が決定されることがほとんどです。ユーザーIDや商品のIDなどが設定されるイメージです。
クエリパラメータ
?a=hoge&b=9999&c=true
この部分のことになります。?で始まり、key=valueの形式で記載されます。複数のパラメータを繋ぐ場合は&で繋ぐので、つまりこのパラメータは「hogeという値のaパラメータ」「9999という値のbパラメータ」「trueという値のcパラメータ」という3つのパラメータで構築されていることになります。検索値などが入っているイメージです。
テストするときの勘所
初めに注意
今回紹介している方法には、「URLパラメータ改ざん」と呼ばれる不正アクセスに使用される手法および「BOLA」と呼ばれる脆弱性に関する内容が含まれます。自分で開発しているサイトやテスト用のサイト以外では使用すると不正アクセスになりますので注意です。
内容が見えてはいけないパラメータを指定する
たとえばECサイトをイメージした場合、未発売の商品のページなど、特定のユーザーにしか見えてはいけないページというものが各アプリケーション存在するものだと思います。通常の動線ではそのURLにアクセスすることはなくとも、URLを直接指定してそのURLで見られる中身が見えてしまうなら、そのアプリケーションは不正アクセスに対する制御ができていないことになってしまいます。
なので、なんらかのIDを指定するURLで、かつ特定のユーザーにのみ閲覧可能という条件を持つページなのであれば、必ずパラメータを書き換えて許認可されているユーザー以外にはアクセスできないことを確認した方がよいと思います。
パラメータの「型」を無視する
裏で動いているプログラムにもよるのですが、パラメータによってはその値の「型」を指定している場合があります。
「型」には以下のような種類があります。
文字列を指定するString型 例:hoge
数字を指定するInteger型 例:9999
真偽値を指定するBoolean型 例:true, false
これらの型は値の内容からおおよそ型を推測できますし、API仕様書などがあればあらかじめ型が指定されている場合もあります。
が、テストするときはこの「型」を無視しましょう。hogeと指定されていたところにnullと入れてみたり、9999と指定されていたところにfugaと入れてみたりします。
正しく制御されているAPIやURLなら、不正なリクエストを示す400エラーを返してくれることが多いと思いますが、この辺りが正しく制御されていないとプログラム側で型エラー(型が想定と異なる場合に発生する例外)でサーバーエラーを示す500エラーが返される場合があります。この500エラーが飛ぶことは基本的に望ましくないので、きちんと制御が入るようにするのがよいと思います。
終わりに
QAエンジニアの方々は入力フォームの内容をいろいろな値でテストすることが多いと思いますが、URLパラメータでも同じことが可能です。よろしければテストする際の頭の片隅にでも置いていただけると幸いです。
ここまでお読みいただきありがとうございました。