• ベストアンサー

Javascriptによる時間に応じたアクセス制限を確実にする方法

CGIの中に、 ($sec, $min, $hour, $day, $mon, $year) = localtime(time); として return"恐れ入りますが、現在は受付時間外です" if $hour < 10 && $hour > 22; で深夜から朝にかけてのフォーム受付を拒否する仕組みになっているPerlのCGIがあるのですが、これだと、フォームを送信しにアクセスする側のパソコンの時計が狂っていたり意図的にPCのカレンダーをいじって時間帯制限をかいくぐられるとエラーにならずにフォームが送信されてしまいます。 このような抜け穴をなくし、実際の日本時間が22時以降20時以前の場合はPCの時計が何時になっていようと「申し訳ありませんが…のメッセージを表示できるようにするにはどうしたら良いでしょうか? おわかりの方がいらっしゃいましたらどうか具体的なソースをご教授いただきたく、どうかよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 そのシステムは JavaScript でしょうか? CGIでしょうか?  CGIであれば、そのような抜け道は発生しえませんし、逆に JavaScript であれば、サーバー側から現在時刻を渡してあげないかぎり無理ではないでしょうか。

MORGEN
質問者

お礼

早速のお返事、どうもありがとうございます。 そうですか、Javascriptではやはり無理なんですね。

MORGEN
質問者

補足

>そのシステムは JavaScript でしょうか? CGIでしょうか? PerlのCGIの中に 「return "xxxxx" if $xx= y;」 というくだりがあったので、CGIのいじり方を殆ど知らない私の対処法としてJavascriptでlocaltimeを取得して制限する方法をCGIの中に埋め込んであるんです。 CGIで制限する方法って、確実なんですね? とすると、「return "xxxxx" if $xx= y;」(これは元々CGIに有ったエラーを返す部分のソースです)をどのように書き換えたら制限できるのでしょうか? 何度もお手数をおかけして恐縮ですが、教えて頂けますでしょうか?

その他の回答 (1)

  • chack
  • ベストアンサー率50% (9/18)
回答No.2

CGIとJavascriptのソースを混同なさっていませんか? Javascriptで時刻を取得する場合は ($sec, $min, $hour, $day, $mon, $year) = localtime(time); でなく、 document.write(seigen[myDate.getHours()]); などとなるはずです。 「return"恐れ入りますが、現在は受付時間外です" if $hour < 10 && $hour > 22;」 のまま、ご自分のPCの時計をいじって動作チェックをしてみてはいかがでしょう?

MORGEN
質問者

お礼

早々のアドバイスをどうもありがとうございます。 あれっ?そうですね。おっしゃる通り、PCの時計を狂わせて送信してみたところ、それでもエラーチェックに引っ掛かりました。 どうもお世話になりました!

MORGEN
質問者

補足

どうもCGIとjavascriptのソースの書き方の違いがよく解っていないようです。ご面倒をおかけしました。 deagleさん、おっしゃる通りでした。どうもすみませんでした。

関連するQ&A