セマンティックバージョニングをファイル名につける場合の問題
セマンティックバージョニングのビルドメタデータ
前回の記事でセマンティックバージョニングに注目していると書きました。
セマンティックバージョニングとは・・・
メジャー.マイナー.パッチ[-プレリリース][+ビルドメタデータ]
という形で表すバージョン番号で、バージョン比較に影響しないビルドメタデータというのが 良いなと思っていました。
たとえば、
- リビジョンNo
- JenkinsのビルドNo
- ビルドしたPC
- ビルドしたユーザ
といった情報をメタデータに埋め込めれば、同じバージョン番号でも実は違うものということが表現できそうです。 (後半2つに関しては違っていては本来困りますが)
セマンティックバージョニングをファイル名につける場合の問題
Jenkins等のCIサーバを使って自動ビルドをしていると日々インストーラが出来上がるので それらを区別するためにファイル名にバージョン番号を付けたいですよね?
そのバージョン番号は前3つの数字の意味が決まっているので、ビルドNoやリビジョンNoはビルドメタデータになります。 ビルドメタデータは先頭に"+"を付けるわけですが、この"+"が曲者になります。
"+"のついたファイルを、IIS上にアップロードしてアクセスしてみると・・・
HTTP エラー 404.11が返ってきてアクセスできません。 どうも、"+"を含むURIはIISのデフォルト設定ではセキュリティ上禁止されているようです。 "+"のパーセントエンコードである%2Bにしても同様でした。
もちろん、設定をOFFにすることはできるのですが、理由があってこの設定になっているはずで、安易にOFFにするのは良くないでしょう。
ということで、セマンティックバージョニングとURIというのはいまいち相性がよくないようです。
ダブルエスケープシーケンスって?
ダブルエスケープシーケンス、調べてみてもOFFにする方法はすぐヒットしますが、 何が問題で禁止されているか、いまいち要領を得ません。
少し調べてみて、ここのサイトによるとASP.NET MVCではURIの一部が変数としてコントローラに渡されるので、 SQLインジェクションにつながるから危険よと書いてそうです。そういうことなんでしょうかね。 ただ、なぜ"+"がダメなのかまではわかりませんでしたが。