- PR -

ネットワーク上のファイル存在チェック

1
投稿者投稿内容
takeuchi
会議室デビュー日: 2003/03/13
投稿数: 4
投稿日時: 2003-04-04 20:51
現在VB.NETでWEBアプリ(社内用)を作成中です。

WEBサーバに社員の顔写真が保管してあり、WEBブラウザ上で選択された
社員の顔写真をJavaScriptでwindow.openしています…。

顔写真のパスをURL形式として指定し表示する方法をとっているのですが、
(http://xxxx/9999.jpg)
できれば事前に存在チェックを行い、存在しない場合は「写真データが
ありません」ダイアログを表示したいのです。
(今は「ページが見つかりません」というページが出る)

FileInfo.Existsを使おうとすると、URLはパスと見なしてくれませんし、
URLでなくWEBサーバ上の物理パスを指定すると、ネットワークをパスしないと
(LoginID/Password)参照できません。
過去ログを検索しましたが内部で密かにネットワークドライブ接続する
しかないのでしょうか?
できれば他の方法をとりたいのですが…。

もしご存知の方がいらしたら、ご教授ください。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2003-04-05 10:00
こんにちは

色々な方法があると思います。
1.ブラウザに表示させるので有れば,サーバのバック処理で可能と思います。
 -1.社員を特定するidをサーバーへ送る(***.aspx?id=xxxxx等,他の方法でも可)
 -2.そのidに関連付けられた(データベスを使っても良いし、そのままでも良いと
思います)画像を確認
 -3.その結果をhtmlか画像のStreamでブラウザへ返送
htmlの時は、img src=****
画像Streamの時は,呼び出す時にimg src=***.aspx?id=xxxxxで問い合わせる。
2.又、社内用で利用者が限定されるのであれば、Windoesアプリとし、
その内からWebClientとしてサーバーに接続し、社員画像を取得。
 この時は、クライアント側で色々な処理が出来ると思います。


 
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2003-04-05 12:54
(http://xxxx/9999.jpg) のダミーの画像を最初にWebサーバー
に詰めておき、その後、顔画像を上書きする。プログラムを書かない方法では。
takeuchi
会議室デビュー日: 2003/03/13
投稿数: 4
投稿日時: 2003-04-07 17:30
丁寧なご指摘、ありがとうございました。
事情で急に時間がなくなってしまったので超簡単な対処にしてしまいました。
済みません。

1)社員IDを次頁に送る(****.aspx?id=9999)
2)社員IDを使ってURLを生成する
3)image1.ImageUrl = 生成したURL
4)image1.ToolTip = "顔写真"
5)image1.AlternateText = "写真データがありません…"

5)だけだと顔写真が写っているのにカーソルを合わせると
「写真データがありません」とクイックヒントみたくなってしまう
ので仕方なく4)を追加しました。
これで写真データが存在すれば写真を表示するし、なければ
「写真データがありません」というメッセージを表示します。

今度時間がとれたらもっといい方法がないか色々考えてみます。

ありがとうございました、以上です
biac
大ベテラン
会議室デビュー日: 2001/10/22
投稿数: 106
投稿日時: 2003-04-07 19:32
引用:

1)社員IDを次頁に送る(****.aspx?id=9999)
2)社員IDを使ってURLを生成する
3)image1.ImageUrl = 生成したURL


この手法は、 セキュリティ面で問題があります。

2) で、きちんとサニタイジングしていますか?
そうじゃないと、クロスサイトスクリプティングやブラウザクラッシャに利用されてしまいます。 (イントラだからまぁいいや、という考えもアリかもしれませんが。)

端的な例を示します。
image1.ImageUrl = 社員ID + ".jpg"
だったとします。
社員ID として「javascript:alert(document.cookie)" hoge="」を送り込まれたとすると、 生成される HTML は、次のようになるでしょう。
<img src="javascript:alert(document.cookie)" hoge=".jpg">

ブラウザは src 属性に指定された JavaScript を実行してしまい、 クッキーの内容を盗み取られることになります。 (ブラウザが知らない hoge 属性は無視されます。)

※ この例ではポップアップウィンドウに表示されるだけです。

※ ASP.NET のサーバコントロールは、自動的に (中途半端な) サニタイジングをしてくれるようですが、img については未確認です。

この対処として HtmlEncode すれば十分かというと、そうではありません。
img 要素の src 属性については、 < > " などの文字が HtmlEncode で実体参照に置き換えられてしまっても有効な攻撃方法が、 いろいろと「研究」されています。
生成した URL に該当するファイルの存在を確認することが、 唯一確実な対処法だと思われます。

※ ちなみに、 imput 要素の value 属性などは、 HtmlEncode しておけば十分です。


引用:

5)image1.AlternateText = "写真データがありません…"


HTML 的には、 「写真データがありません…」というのは、よろしくない表記かと。

img 要素の alt 属性は alternate (代替するもの) のことですが、 画像データが無いときの代替物ではありません。
画像を表示できないブラウザが (画像データの有無に関係無く)、 画像の代わりに表示するテキストです。

http://www.w3.org/TR/html4/struct/objects.html#adef-alt
http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/struct/objects.html#adef-alt
おけら
会議室デビュー日: 2002/12/24
投稿数: 13
お住まい・勤務地: 両さんのいる交番の近く
投稿日時: 2003-04-07 23:52
こんにちは。
今さらですが、こんなのはいかがですか?

<img src = "http://xxx/yyy.jpg" onerror = "エラー処理スクリプト">


適切な画像が無かった場合、onerrorイベントが発生します。
onerrorでアラートを出すなり別URLに飛ばすなりすればよいのではないかと思います。


[ メッセージ編集済み 編集者: おけら 編集日時 2003-04-07 23:59 ]
1

スキルアップ/キャリアアップ(JOB@IT)