KiSAKU
技術系約5分で読めます

正しく止められたときに、何を残すか

公開

記事は無事に登録できるようになりました。原因も分かり、書き方も直しました。

ここで、もう1つ決めたことがあります。遮断の仕組みは、切りませんでした。

この記事で扱うこと

選べた3つの対処と、なぜ「書き方を変える」を選んだか。そして、次に同じ症状が出たときのために何を残したかです。連載の最終回になります。

連載「弾かれる」(全5回)

第1回:症状の切り分け/第2回:二分探索で原因を絞る/第3回:エスケープが効かなかった理由/第4回:意味を変えずに書き直す/第5回:正しく止められたときに何を残すか(この記事)

対処は3つあった

やること 手間 あとで効くこと
A 遮断の仕組みを止める 設定1つ 全部の攻撃も通る
B この判定だけ除外する 設定と検証 同じ形の攻撃が通る
C 書き方を変える 記事ごとに手直し 記事を書くたび制約が残る

Aがいちばん楽です。1つ切れば全部通ります。

選ばなかった理由は単純で、通したいのは自分の要求だけだからです。切ると、自分以外の要求も同じように通ります。

Bを選ばなかった理由

Bのほうは、もう少し迷いました。引っかかっている判定を1つだけ外せば、他の防御は残ります。

やめた理由は2つです。

懸念
1 外した判定が何を守っていたのかを、自分が分かっていない
2 外した記録が設定画面にしか残らない。半年後に理由を思い出せない
分からないものを外すのは、外したことも忘れる

この判定が引っかかったのは、コードの断片と攻撃コードの区別がつかないからでした。区別がつかない以上、外せば本物も通ります。

そして一度外すと、それは設定の中で静かに外れたままになります。「なぜ外したか」を覚えている人がいなくなった時点で、外れていること自体が忘れられます。

Cは手間が残ります。記事を書くたびに、その形を使えない。ただ、手間が残るということは、理由が見え続けるということでもあります。

誤検知だったが、間違いではなかった

今回止められたのは、攻撃ではありません。自分の記事です。判定としては誤りでした。

ただ、判定する側の仕事としては正しいと思っています。

判定側から見えているもの 実際
文字列を組み立てる記号の対 サンプルコード/攻撃コード
置き換えの命令と括弧 サンプルコード/攻撃コード

送られてくる文字列だけを見て、どちらかを判別する方法はありません。区別がつかないものを、安全な側に倒しているだけです。

倒す先を逆にすると、通してはいけないものが通ります。誤検知が出るのは、正しい側に倒している証拠でした。

残したもの

同じことが次に起きたときのために、2つ残しました。

1つめは、通った例と落ちた例の一覧です。絞り込みの途中で、たくさん試しています。その結果を捨てずに書き出しました。

試した形 結果
囲む記号が1つだけ 通る
囲む記号が対 落ちる
置き換えの命令と括弧 落ちる
他の命令と括弧 通る
正規表現をそのまま書く 通る
配列をつなぐ命令 通る

この表があると、次に落ちたときに「まずこの2つが入っていないか見る」から始められます。11回の絞り込みをやり直さずに済みます。

2つめは、手順そのものです。症状から原因に辿り着くまでの最短経路を書き出しました。

順番 やること 分かること
1 空の下書きを作ってみる 通れば権限の問題ではない
2 断られたときの応答の中身を見る CMSの形式でなければ手前で止まっている
3 既知の2つが本文にないか探す あれば、そこで終わり
4 無ければ、半分ずつ切って絞る 11回で1文字まで
5 見つけた形を一覧に追記する 次はもっと早い
5番目があるかどうかで、次の速さが変わる

手順の最後に「分かったことを足す」を入れています。これが無いと、毎回同じ場所から始めることになります。

今回の11回は、この一覧が空だったから必要でした。次に同じ症状が出たら、3番目で終わる可能性が高いと思っています。

連載を通して

5回分を振り返ると、実際に手を動かしたのは第4回の書き換えだけでした。

回 やっていたこと
第1回 誰が断ったのかを見分ける
第2回 どこが原因かを機械的に絞る
第3回 迂回できない理由を理解する
第4回 直す
第5回 次のために残す

直す作業の前後に、確かめる作業と残す作業がありました。止められたこと自体より、止められてから何をしたかのほうが長いという構成です。

今回の学び

まず、いちばん楽な対処は、いちばん広く効いてしまうということ。遮断を切れば通りますが、通したいのは自分の要求だけでした。効く範囲が目的より広いときは、たいてい選ぶべきではありません。

次に、誤検知は、正しい側に倒している証拠だということ。区別がつかないものを危険側に倒すから、安全なものも止まります。止まらなくなったら、それは判定が甘くなったということでした。

そして、手順の最後に「分かったことを足す」を入れること。今回の11回は、記録が空だったから必要でした。足す工程を手順に含めておかないと、次も同じ場所から始めることになります。

この記事を共有する

Xでポストはてブ
← ブログ一覧へ戻る