2008年3月25日火曜日

Windows SharePint Servicesで元ファイルをダウンロードさせない方法

Windows SharePoint Servicesは元来ファイル共有のための機能であり
「WSSにファイルを置いて閲覧させる」
ということは
「そのファイルをユーザがローカルに展開できる」
ということと同意である。
別にこれはWSSに限らずPCで何かを閲覧する場合は必ず起こることだ。

旅行中にボス何やらのたまわったらしい。
『WSS上でファイル(PPT)を閲覧させたいが印刷とローカルへコピーを不可にしたい』

はい、ぱっと考えて『絶対』は無理ですね。だって閲覧するんだもん。

自分は不在だったから、ボスがなんとかしようとあがいたようで
なんとPPTをどっかに依頼してswfに変換してアップロードしてました。
でもブラウザの印刷機能で印刷可能なんですが…。開いた口が塞がりません。

さて帰国したのでちょっと考えてみた。
絶対は無理にしろ、「ほぼ無理」くらいにはできないだろうか?

これは今までも印刷配布不可にする場合は
Adobe Acrobatで印刷不可のセキュリティをつけていたので
ためしに設定してWSSにアップロードしてみる。
ふむ、印刷は不可になった。
が、WSS上でPDFファイル(のリンク)を叩くと
ローカルでAdobe Readerが立ち上がりアプリ上で表示される。
このままではReader上のツールバーのファイルから保存が選べてしまう。
次はこの機能を削ろう。
再びAdobe Acrobatで
「ファイル」→「文書のプロパティ」→「開き方」→
(ユーザインタフェイスオプション)で
「メニューバーを非表示」、「ツールバーを非表示」を設定。
と設定して印刷不可のままファイルを保存。
これでReaderで開く分には問題はなくなった。

さて肝心なのはこのファイルをWSS上に置くということだ。
ユーザが閲覧しようとする場合は
当然そのファイルへのリンクをクリックして表示するわけで
そのリンクを「リンク先を名前を付けて保存」を選択すれば
ファイルそのものをローカルへ保存できる。
IIS上で上手く設定すれば実体を隠せそうだが
今回はWSS上なのでそうそう複雑なことはできない。

思いついた方法が
1、一般には公開しない(リンクを表示しない)ドキュメントライブラリを作成してそこにPDFを置く。
2、htmlファイルを作成して、その内に上記のPDFを参照で表示するようにする。
わずか3行。こんな感じ。
<HTML>
<EMBED src="hogehoge.pdf" width="100%" height="100%" >
</HTML>
3、htmlファイルを共有ドキュメントライブラリに置く。
4、ユーザへの告知はhtmlファイルへのリンクを表示する。
確かにこれでユーザへの表示はhtmlのリンクなので右クリックで保存はできない。
でもhtmlファイルのソースを見れば実ファイルがどこにあるかがバレバレ。
なんとかこのソースの表示を隠せないか?

ググってみたらこんなページが。
http://www.broadband-xp.com/hidesource/index.html
かなり細かい解説が良い感じ。
しかもページの著者が作ったソフトが結構凄い。機能充実の割に安いし。

でもただでやりたいよね、やっぱ。もうちょっとググってみた。
したらこのページにフリーのhtml暗号化ツール、XORHTMLが。
http://ni.10-59.com/
どうやらJavascriptを利用したものらしい。
これで先ほどのhtmlファイルのソースを暗号化。

これで完成。あとはキャッシュとPrintScreenくらいじゃないかと。

0 件のコメント: