• 締切済み

サーバー上のファイルアクセス禁止について

ASPを用いて作成したファイルを Webに公開したくないと思っているのですが やり方がわからず困っています。 いま、アンケートを集計するようなページを メモ帳で作っています。 そのアンケートの回答結果として IIS上でASPを用いてAnswer.xlsというファイルを作成しています。 ファイルの中は データ1 タブ データ2 タブ・・・・ という風になっており、直接エクセルファイルをイジっているわけではりません。 ここでURL/Answer.xlsとブラウザに入力すると、 ファイルが表示されてしまうことに困っています。 Answer.xlsはASPで動的に作成されるので なるべく、サーバー管理者的な操作で無いほうがうれしいです。 よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.7

1つ書き忘れていたことがありました 管理ページを実行するユーザーがAdministratorsグループに属している必要があります

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

管理用のASPファイルを置いてあるフォルダーの認証方式は変更なさいましたか? 管理対象URLが http://localhost/aaa/ 対象ファイル answer.txt set oFile = GetObject("IIS://localhost/W3SVC/1/root/aaa/answer.txt") といった具合です IIS管理ツールで 管理用ASPファイルの置いてあるフォルダーのプロパティを表示 『ディレクトリセキュリティ』タブを選択 『匿名アクセスおよび認証コントロール』の『編集』をクリック 『匿名アクセス』のチェックをはずす OKをクリックして ダイアログを閉じる IISのバージョンは何ですか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

IISを再起動でもダメなら パソコンを再起動でどうでしょう Server.MapPathで取得したパスに対して AccessReadやAccessWriteを設定するのではなく GetObject("IIS://Localhost/W3SVC/1/Root/仮想フォルダ/answer.xls") で取得したオブジェクトに対して GetまたはPutを使うのだと思います wwwrootの直下にAnswer.xlsがあるなら『/仮想フォルダ部分』は不要です dim objFile Set objFile = GetObject("IIS://localhost/W3SVC/1/root/Anser.xls") if objFile.Get("AccessRead") = True then   objFile.Put "AccressRead", False   objFIle.SetInfo end if といった具合でしょう Visual Studio などをお持ちなら付属のヘルプで Web開発  インターネット インフォメーションサーバー 5.0   Active Server Pagesガイド    IISをプログラム管理する 辺りを参照してみてください

diolab
質問者

お礼

ごめんなさい。 いろいろ試しても、GetObjectで書き込めませんというエラーになってしまいます。 ファイルの削除は出来ました。 パスですが、 URL/aaa/Answer.xlsのとき IIS://localhost/W3SVC/1/root/aaa/Anser.xls でいいのでしょうか? ちょっとめげそうです。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

すみません 訂正箇所がありました objFile.Put "AccessWrite", False でした それと objFile.SetInfo を実行しないと プロパティの変更結果が反映されませんでした m(__)m

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

# Ano2の実行権限偽装はしなくても出来そうです ASPからやるとすれば IISAdminオブジェクトを使ってやることになります IISAdminオブジェクトを使う管理サイトと 管理対象のサイトは別にします 管理サイト側は 匿名アクセスを禁止します IISマネージャで管理サイトを開いて プロパティを表示させます ディレクトリセキュリティタブの『匿名アクセスおよび認証コントロール』の『編集』ボタンをクリック 匿名アクセスのチェックを外します 認証済みアクセスの『統合 Windows認証』にチェックを入れておきます # デフォルトで付いてると思います これでOK 仮想ディレクトリタブ等で ASPアプリケーションを作成します 管理サイトの管理ページを Default.aspなどで作成します dim objFile Set objFile = GetObject("IIS//Localhost/W3SVC/1/Root/仮想ディレクトリ/管理対象ファイル") if objFile.Get("AccessRead")= True then objFile.Put "AccessRead", False End If ' 同様に 書き込みアクセスは ' objFile.Put "WruteAccess", True ' といった具合で設定可能です などといったスクリプトで属性の変更が出来ます あとはこのページに HTMLコントロールなどを作って PostBackした際に上記のコードを実行するようにしてやれば良いでしょう この管理サイトを実行するには そのホストコンピュータにローカルログオンできるユーザーでアクセスする必要があります

diolab
質問者

お礼

返信ありがとうございます。 早速やってみて 困ったことになってしまいました。 Dim anserPath anserPath = Server.MapPath( "./Anser.xls" ) Set objFile = GetObject( anserPath ) If objFile.Get("AccessRead")=True Then objFile.put "AccessRead", False objFile.SetInfo End If objFile.close このようにやってみたところ、 ブラウザ?がフリーズしてしまいました。 結果、Anser.xlsがロック状態になってしまい、 削除もステータス変更も出来なくなってしまいました。 どうすればいいか分かりますでしょうか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

それでしたらそのサイト内の特定のフォルダにアクセス権を設定してそのフォルダーに データファイルを集めるようにしてみてはいかがでしょう ASPからアクセス権を設定することは可能ですが実行権限を偽装しないといけないのスクリプトから実行するのは結構大変です

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

IISマネージャから制御したほうが簡単ですよ IISマネージャでそのURLのフォルダを開きます 次に Answer.xlsファイルを選択して 操作 > プロパティを実行します ここの『読み取り(R)』のチェックを外し 『書き込み(W)』のチェックをつけて OKでプロパティを閉じます NTFSのアクセス権を適切に設定すればOKでしょう IUSER_コンピュータ名のユーザーに対して 変更を許可します 匿名アクセスが有効ならASPが実行されるのは このIUSER_コンピュータ名 と言うユーザー名になります この設定でブラウザで URL/Answer.xlsにアクセスしても拒否されますよ

diolab
質問者

お礼

返信ありがとうございます。 ファイルまたはフォルダに対してアクセス権限の変更による アクセス操作という風に理解しました。 実は、Answer.xlsのようなファイルはひとつではなく、 動的に生成されているので、一つ一つにアクセス権を指定するのは 現実的ではなく、頭を悩ませております。 >なるべく、サーバー管理者的な操作で無いほうがうれしいです。 というのがそういうことを意図していたのですが 読み返してみるとわからなくて当たり前ですね。 すみませんでした。 アクセス権についての手法についての知識に乏しく、 こういった質問になってしまいました。 具体的に質問しなおすと ファイルORフォルダのアクセス権をASPから変更する方法? ということになるかもしれません。 おじかんありましたらお力添え お願いいたします。

関連するQ&A