サイトAが送ってきたquery(url)で取り出したURL文字列があり、そいつを使って最後にサイトAにリダイレクトして頂戴よとある日言われました。
はあそうですかとquery(url)で取り出してリダイレクトしたら、飛んだ先のサイトAでエラーになることがある。urlもまたクエリidを持つものであるからして、それにはもちろんURLエンコードがかけてあります。
で。エラーになったりならなかったりするわけ。
ログを仕込んでログを睨んで、頭がビリビリと痺れてきますね、、
あるログで、うちのサーバーにきたときのリクエストURLのクエリに
「id=????????%252B??????」
という5文字を含んだidがついていました。
これはつまりサイトAは「id=????????%2B??????」というクエリでリクエスト飛ばしてほしいって意味なんだろうけど、実際のリダイレクト時のURLをログに出してみたら「id=???????? ??????」となっています。
「%252B」を更にURLデコードしたら「%2B」、、、更にURLデコードしたら「+」だよね、、+ってつまり「空白 」じゃん?
クエリ「id=???????? ??????」を持ってサイトAにリクエストしててidエラーっすよ。
Str::afterでurl=以降を取り出してsessionに放り込んでことなきを得ました。
query()が最後までURLデコードしたものを返すとは露知らず!ご迷惑をおかけいたしまして申し訳ありません🙇♂️
%とか混ぜるな危険