QA@IT
«回答へ戻る

回答を投稿

一番の問題は、ご自身も挙げていらっしゃいますが、すべてのアクションが GET で実行されてしまう、という点だと思います。

HTTP の仕様では GET リクエストは副作用がないことになっているため、リソースの変更を伴うアクションを GET で実行できてしまうのは問題があります。

たとえば、Rails では CSRF 対策として、リソースの変更を伴うリクエストにはトークンを必要としますが、GET リクエストではこれを必要としないため、CSRF に対する脆弱性が生まれます (twitter で短縮 URL をクリックしたら http://example.com/users/1/destroy でユーザ削除されちゃった、とか)。

意図的な攻撃でなくともユーザが URL を誰かに知らせたり、クローラや prefetch を行うブラウザ拡張機能などにより意図しないリソースの変更が起こりえます。

ほかには Controller クラスの public なメソッドが外部から実行し放題、というのも、無用にセキュリティ上のリスクを高めてしまうように思います。

一番の問題は、ご自身も挙げていらっしゃいますが、すべてのアクションが GET で実行されてしまう、という点だと思います。

HTTP の仕様では GET リクエストは副作用がないことになっているため、リソースの変更を伴うアクションを GET で実行できてしまうのは問題があります。

たとえば、Rails では CSRF 対策として、リソースの変更を伴うリクエストにはトークンを必要としますが、GET リクエストではこれを必要としないため、CSRF に対する脆弱性が生まれます (twitter で短縮 URL をクリックしたら http://example.com/users/1/destroy でユーザ削除されちゃった、とか)。

意図的な攻撃でなくともユーザが URL を誰かに知らせたり、クローラや prefetch を行うブラウザ拡張機能などにより意図しないリソースの変更が起こりえます。

ほかには Controller クラスの public なメソッドが外部から実行し放題、というのも、無用にセキュリティ上のリスクを高めてしまうように思います。