プロが教える店舗&オフィスのセキュリティ対策術

ASPを用いて作成したファイルを
Webに公開したくないと思っているのですが
やり方がわからず困っています。

いま、アンケートを集計するようなページを
メモ帳で作っています。
そのアンケートの回答結果として
IIS上でASPを用いてAnswer.xlsというファイルを作成しています。

ファイルの中は
データ1 タブ データ2 タブ・・・・
という風になっており、直接エクセルファイルをイジっているわけではりません。

ここでURL/Answer.xlsとブラウザに入力すると、
ファイルが表示されてしまうことに困っています。

Answer.xlsはASPで動的に作成されるので
なるべく、サーバー管理者的な操作で無いほうがうれしいです。

よろしくお願いします。

A 回答 (7件)

1つ書き忘れていたことがありました



管理ページを実行するユーザーがAdministratorsグループに属している必要があります
    • good
    • 0

管理用のASPファイルを置いてあるフォルダーの認証方式は変更なさいましたか?



管理対象URLが http://localhost/aaa/
対象ファイル answer.txt
set oFile = GetObject("IIS://localhost/W3SVC/1/root/aaa/answer.txt")
といった具合です

IIS管理ツールで 管理用ASPファイルの置いてあるフォルダーのプロパティを表示
『ディレクトリセキュリティ』タブを選択
『匿名アクセスおよび認証コントロール』の『編集』をクリック
『匿名アクセス』のチェックをはずす
OKをクリックして ダイアログを閉じる

IISのバージョンは何ですか?
    • good
    • 0

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をプログラム管理する
辺りを参照してみてください
    • good
    • 0
この回答へのお礼

ごめんなさい。
いろいろ試しても、GetObjectで書き込めませんというエラーになってしまいます。

ファイルの削除は出来ました。

パスですが、
URL/aaa/Answer.xlsのとき
IIS://localhost/W3SVC/1/root/aaa/Anser.xls

でいいのでしょうか?
ちょっとめげそうです。

お礼日時:2007/11/23 14:55

すみません 訂正箇所がありました



objFile.Put "AccessWrite", False
でした
それと
objFile.SetInfo
を実行しないと プロパティの変更結果が反映されませんでした m(__)m
    • good
    • 0

# 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した際に上記のコードを実行するようにしてやれば良いでしょう

この管理サイトを実行するには そのホストコンピュータにローカルログオンできるユーザーでアクセスする必要があります
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

早速やってみて
困ったことになってしまいました。

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がロック状態になってしまい、
削除もステータス変更も出来なくなってしまいました。

どうすればいいか分かりますでしょうか?

お礼日時:2007/11/20 19:32

それでしたらそのサイト内の特定のフォルダにアクセス権を設定してそのフォルダーに データファイルを集めるようにしてみてはいかがでしょう



ASPからアクセス権を設定することは可能ですが実行権限を偽装しないといけないのスクリプトから実行するのは結構大変です
    • good
    • 0

IISマネージャから制御したほうが簡単ですよ


IISマネージャでそのURLのフォルダを開きます
次に Answer.xlsファイルを選択して 操作 > プロパティを実行します
ここの『読み取り(R)』のチェックを外し
『書き込み(W)』のチェックをつけて OKでプロパティを閉じます

NTFSのアクセス権を適切に設定すればOKでしょう
IUSER_コンピュータ名のユーザーに対して 変更を許可します
匿名アクセスが有効ならASPが実行されるのは このIUSER_コンピュータ名 と言うユーザー名になります

この設定でブラウザで URL/Answer.xlsにアクセスしても拒否されますよ
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

ファイルまたはフォルダに対してアクセス権限の変更による
アクセス操作という風に理解しました。

実は、Answer.xlsのようなファイルはひとつではなく、
動的に生成されているので、一つ一つにアクセス権を指定するのは
現実的ではなく、頭を悩ませております。

>なるべく、サーバー管理者的な操作で無いほうがうれしいです。
というのがそういうことを意図していたのですが
読み返してみるとわからなくて当たり前ですね。
すみませんでした。

アクセス権についての手法についての知識に乏しく、
こういった質問になってしまいました。

具体的に質問しなおすと
ファイルORフォルダのアクセス権をASPから変更する方法?
ということになるかもしれません。

おじかんありましたらお力添え
お願いいたします。

お礼日時:2007/11/19 19:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!