- ベストアンサー
CGIアプリのセキュリティ強化
CGIの掲示板を会員制にしようと検討しています。 例えば投稿画面が <form action="BB.cgi"> <input ~~~~~~~~~> </form> となっています。しかし気づいたのですが、投稿画面のソースをローカルに保存し例えばinput などを変更しローカルから変更された項目と共に投稿されてしまうケースがあります。( <form action="ここをフルURLに設定しなおすとネットにつなげば投稿できてしまいました">) これを防ぐにはどうしたらいいのでしょうか。 自分が考えた物では指定したページのみのクリエを受け取るようにしてはどうかと思いましたが、このようなシステムを作る知識はありません。 どうぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まずは投稿処理をするCGI側に、投稿元のURLを指定します。 $baseURL = "投稿元のURL(http://から)を指定"; 次に投稿直前に「投稿元チェック関数(refCheck)」を呼び出し、返り値が0ならエラー処理をします。 $ref_flag = &refCheck; if ($ref_flag == 0) { ここにエラー処理 } refCheck関数は投稿処理をするCGIの最後のほうに入れておけばいいです。 sub refCheck { local($ref) = $ENV{'HTTP_REFERER'}; $ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; if ($ref =~ /$baseUrl/i) { return 1; } else { return 0; } } # $ENV{'HTTP_REFERER'}が投稿元のURLで、それに$baseUrlが含まれているか判別をしています。
その他の回答 (1)
- yuuki0229
- ベストアンサー率70% (33/47)
> input などを変更し フォームの改竄についてはサーバ側でデータのチェックをする必要があります。 CGIで一番狙われやすい(狙いやすい)場所ではないでしょうか。
お礼
>CGIで一番狙われやすい(狙いやすい)場所ではないでしょうか。 そうですね。それをどう防ぐか質問させていただいてます。
お礼
ご回答有難うございました。早速試してみたいと思います。