5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

イントラネットのhttpサーバからファイルサーバーへリンクを開けるようにした話(Windows限定)

Posted at

イントラネットに、Growiというwikiを設置した(された)んですが、そこのページからファイルサーバーへのリンクを張ろうとすると…できません。

イントラネットなんだし、多少セキュリティがガバっても利便性を取ろうってことで、なんとかやろうとしたことに辿り着くまでの話です。

真似をしても、当方は一切責任を負いません。自己責任で実施してください。

ブラウザの制約

現代のブラウザだとfile:プロトコルでリンクを貼っても、クリックしても開けません。
Firefoxだと、about:config設定を変える必要があるようです。
Chromeだと、起動オプションを設定する必要があるようです。
Edgeは知りませんが、多分同様なんでしょう。

なるべくブラウザを問わない解決方法となると、独自プロトコルを使います。
クリックするとiTunesが開くitmss://music.apple.com/...とか、Githubでx-github-client://openRepo/https://github.com/...ってなっているやつですね。
(蛇足ですが、calculator:というリンクにすると、電卓が立ち上がります。)

今回やろうとしている事は、fileプロトコルをブラウザ自体で開くのではなく、エクスプローラーなり関連付けられているアプリケーションで開ければ良いので好都合です。

Firefoxの様にホワイトリストでリンク元を制限できればいいのですが、独自プロトコルはリンク元がイントラネットかどうか問いません。
悪用されかねないため、独自プロトコルの名前は外部に漏れないようにし、可能な限り推測できないもの(GUIDとか)を使用したほうが良いでしょう。
(面倒だと適当なプレフィックスにしちゃいます。)

プロトコルハンドラーを追加する。

独自プロトコルをアプリケーションで開くには、レジストリにプロトコルハンドラーを設定します。

プロトコルハンドラーの実装はvbscriptとかでもいいのですが、今回はc++で実装しました。

ネイティブアプリなのでwindows defenderなどのセキュリティーソフトからは警告が出まくります。
(オレオレ)コード証明書でサインする運用が良いでしょう。
登録と解除の機能も兼ね備えています。

コードはRegistering an Application to a URI Schemeあたりを参考にしました。

ShellExecuteExでファイルを開くので、ローカルファイルを実行できない様にPathIsNetworkPathでパスに制約を掛けてます。(気休めだけど。)

ビルド

ニッチなアプリケーションなので、バイナリでの配布はしていません。
CustomFileProtocolHandlerはVisual Studio 2017以降(Express)でビルドできます。
Windows SDK バージョンは環境に合わせて適宜変更してください。

Wikiのリンクを独自プロトコルに変換する

growiのmarkdownでは、file:プロトコルへはリンクが張れない様に制限がかかっています。
[doc.txt](file://Contoso/share/doc.txt)
と書くと、リンクにならずそのまま表示されます。

カスタムプロトコルハンドラーで開かれるように、
[doc.txt](A6C4D2B1-62BA-4C53-9018-B186E2E6A5EC://Contoso/share/doc.txt)
もしくは
[doc.txt](A6C4D2B1-62BA-4C53-9018-B186E2E6A5EC:\\\Contoso\share\doc.txt)
と書くようにします。

わざわざカスタムプロトコルを書くのが面倒な場合は、tampermonkeyやgreasemonkey等のuserscriptで、\\\Contoso\share\doc.txtを独自プロトコルを用いたリンクに置き換えます。
userscriptの代わりにGrowiのカスタムスクリプト機能でもできそうですが、管理者権限が無いため私は未確認です。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?