Sinatra を使う場合のセキュリティ設定について

Apache のヘッダーに色々と書いたら Sinatra で書いたアプリケーションが 404 を返したり不穏な挙動を起こすようになってしまった!ドキュメントを読め!というお話。

ことの発端

社内で使う小さな問い合わせフォームを Sinatra でミニマムに実装したのですが、「最低限のセキュリティ設定くらいした方がいいよな…」と思い次の設定を Apache で行いました。

Header set X-XSS-Protection "1; mode=block"
Header set X-Frame-Options DENY

すると ChromeSafari のコンソールで

Error parsing header X-XSS-Protection: 1; mode=block, 1; mode=block: expected semicolon at character position 14. The default protections will be applied.

このようなエラーが発生しました。これを解決します。

先に結論

Apache 側の設定は必要ありませんでした。

なぜそうなるのか

Sinatra がデフォルトで Rack::Protection を使ってセキュリティ対策を行っていたためです。

http://www.sinatrarb.com/intro-ja.html#%E6%94%BB%E6%92%83%E9%98%B2%E5%BE%A1%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E8%A8%AD%E5%AE%9A

これにより Apache 側の設定が二重設定とみなされてコンフリクトしていたようです。
もちろんこれを外せば Apache 側の設定が読まれますが、基本的にこちらに任せた方がいいでしょう。