スレッド表示 | フラット表示〕 全トピック 920 件中 658 番目 次≫ ≪前

他のサイトからの悪用を防ぐには?

created: 2004-03-14 13:55 | modified: 2004-03-18 22:09 | reply: 13

[1404] 他のサイトからの悪用を防ぐには?

user: mowmow | created: 2004-03-14 13:55
こんにちわ・・いつもお世話になります。

例えば$_SERVER変数をすべて表示するスクリプトを作成し、自分のサイトにアップロードします。

このスクリプトが・・最近気が付いたのですが、他のサイトからアクセスできてあたかも自分のサイトにあるファイルのように利用できてしまうのです。(require_onceなどで埋め込んでしまうと)

他のサイトからの悪用などを防ぐにはどのようにすればいいのでしょうか?

よろしくお願いします。
reply: 1405 1411 返信 編集 削除

[1405] .htaccessなど

user: ゆうじ | created: 2004-03-14 17:27
こんにちは。

$_SERVER変数を確認したり、
phpinfo() で設定を確認したりする必要があるのは
管理者でしょうから、.htaccess で
何らかのアクセス制限をかけるのが一般的ではないでしょうか。

私の場合、こうしたスクリプトファイルは、
ユーザー認証をかけたディレクトリ下に置いています。

毎回パスワードの入力が面倒ならば、
セキュリティーは低下しますが、
URLにパスワードを埋め込んだものを
お気に入りに登録しておくと楽になります。
Parent: 1404  reply: 1407 返信 編集 削除

[1407] 一般的なスクリプトの悪用はどう対処しますか?

user: mowmow | created: 2004-03-15 11:12
いつも適切なアドバイス、ありがとうございます。

>管理者でしょうから、.htaccess で
何らかのアクセス制限をかけるのが一般的ではないでしょうか。

そうですね。この手のスクリプトは私も.htaccessでパスワード制御したディレクトリに設置しています。

例えばフォームメールなどのスクリプトの場合はいかがでしょうか? form変数を自動的に処理できるようなスクリプトの場合、他のサイトからでも利用できるのではないかと心配なのです。以前perl-cgiのフォームメールで、セキュリティーホールをつかれてウィルスを大量に不特定多数に送信された経験がありまして・・(^_^;)

よろしくお願いします。
Parent: 1405  reply: 1408 1409 返信 編集 削除

[1408] 防御策いろいろ

user: ゆうじ | created: 2004-03-15 12:35
メール送信スクリプトのような、
自サイトの他フォームから呼び出されるスクリプトならば、
$_SERVER['HTTP_REFERER'] に、
自サイトが含まれていなければ、
エラーにしてしまう。

でもREFERERは偽造が可能なのでもっと強固にしたければ、
メールフォーム以外からのアクセスをエラーに出来るよう、
フォームを表示するスクリプトで、
session変数にメールフォームを通過したフラグを立てておき、
メール送信スクリプトでは、
そのフラグの値で正規のアクセスかどうか判断すると良いと思います。


また、必ずincludeして使われるような
ライブラリ的なスクリプトなら、
スクリプトが外部から直接呼ばれても動作しないよう、
$_SERVER['SCRIPT_NAME'] が
スクリプトファイル自身を示していれば、
エラーにしてしまうという手もあります。
Parent: 1407  reply: 1417 1421 返信 編集 削除

[1417] Re.防御策いろいろ

user: mowmow | created: 2004-03-18 17:22
> $_SERVER['HTTP_REFERER'] に、
> 自サイトが含まれていなければ、
> エラーにしてしまう。
そうですね・・ただ、この場合ブックマークしてそのまま直接飛んできた人はフォームに書き込みできなくなってしまいます。

> session変数にメールフォームを通過したフラグを立てておき、
> メール送信スクリプトでは、
> そのフラグの値で正規のアクセスかどうか判断すると良いと思います。

私もsession変数のことは考えました。この場合formのページ自体をphpファイルにする必要があり、断念しました。フォームを処理するスクリプト・・要するにフォームからのactionで指定されるファイル以外は全てHTMLで作成したかったのです。そのほうが誰でも作れるものになりますし。

> また、必ずincludeして使われるような
> ライブラリ的なスクリプトなら、
> スクリプトが外部から直接呼ばれても動作しないよう、
> $_SERVER['SCRIPT_NAME'] が
> スクリプトファイル自身を示していれば、
> エラーにしてしまうという手もあります。

includeの場合はこの手がいけるのですね。

セキュリティーは、考えれば考えるほど難しいですね。もう少し勉強してみます。
Parent: 1408  返信 編集 削除

[1421] REFERERでもいけますね。失礼しました

user: mowmow | created: 2004-03-18 21:49
> メール送信スクリプトのような、
> 自サイトの他フォームから呼び出されるスクリプトならば、
> $_SERVER['HTTP_REFERER'] に、
> 自サイトが含まれていなければ、
> エラーにしてしまう。

form処理用のphpを埋め込む形でなく、formのactionで移動するタイプのものでは、この方法でもいけますね。先ほどの私のコメント「ブックマークしていた場合」は間違えで、ブックマークしていたとしても、フォームからのREFERERが残るので大丈夫でした。

if($securityCheck == "Y"){
if(!strstr($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME'])){
die("外部からの利用は禁止されています。");
}
}

ふぅ・・(^_^;)

偽造REFERERなんて、使う人いませんよね? (もうそう祈るしか手は無いかも?)
Parent: 1408  返信 編集 削除

[1409] htmlspecialchars関数で

user: masa | created: 2004-03-15 12:42
htmlspecialchars関数でタグを無効化するのは駄目ですか?
タグを無効化すればかなりの危険性は減るのではないかと思いますが・・・・

一般的にフォームメールに入力できる状態であれば管理者にできる一番の対策はhtmlspecialchars関数でタグを無効化するのがいいのではないかと思います。
Parent: 1407  reply: 1416 返信 編集 削除

[1416] なるほど・・・

user: mowmow | created: 2004-03-18 17:07
確かにタグを無効にすると、安全性は高まりますね。私はタグを取り除くのはstrip_tags()関数を、半角変換と同時に行っています。

$postData = strip_tags(mb_convert_kana($postData, "KVa"));

ただ・・外部のサイトで悪用される可能性が消えるわけではないのが、怖いのです。知らない間に悪用されている・・こんなことはまれなんでしょうか?
Parent: 1409  reply: 1419 返信 編集 削除

[1419] 心配わかります。

user: masa | created: 2004-03-18 18:39
確かに心配したらきりがないですね。タグの無効化やセッションでもセキュリティーは防御できますが、もし心配ならばデーターベースを利用して登録した者だけが書きこみできるようにすればいいのではないでしょうか?

登録の際にはIPアドレスも取得して、もし登録しても悪さをするものがいればhtaccessでそのIPアドレスを排除できるのではないでしょうか?
勿論固定のIPアドレスでなければ困りますが
Parent: 1416  reply: 1422 返信 編集 削除

[1422] この方法は別のフォームで使えそうですね

user: mowmow | created: 2004-03-18 22:01
今回のフォームはお問合せフォームなので、データベース認証式では注文時の入力に余計な手間がかかりそうでできそうもないですが、これは会員制の場合に使えそうですね。(^^)
とても勉強になります。

IPではじくというのは、気がつきませんでした。
Parent: 1419  返信 編集 削除

[1411] ブラウザをチェックしてみる

user: シロウ ホームページ | created: 2004-03-15 13:24
@PHP.ringのリストが2ページになっていました。
利用させて頂いているシロウと申します。
もっと沢山のサイトが登録されるといいですね。

この質問は面白いですね。
ブラウザをチェックして防ぐなどは如何でしょうか?
if (is_null($_SERVER["HTTP_USER_AGENT"])) {
echo "ブラウザ情報を送ってください。";
exit();
}
昔、telnetでHTTPを開いたら拒否されるサイトとか有りました。


私のサイトもrequire_once()で悪用されたらと思案しましたが、悪用されて困るものは一般からアクセスできないようになっていました。
ゆうじさんの御指摘のようにアクセス制限をするとか、フォームからの場合は入力チェックを行うなどでしょうか。
私もセッションを使用して、対応する場合があります。
Parent: 1404  reply: 1418 返信 編集 削除

[1418] すごいですね

user: mowmow | created: 2004-03-18 17:34
>悪用されて困るものは一般からアクセスできないようになっていました。

すごいですね。まさにこれを達成したいわけですが、やはりユウジさんがアドバイスされた方法を取るのが一般的なのでしょうね。

ブラウザが吐き出すuserAgent認証の場合は、proxy等を利用している場合、フォームが書き込めなくなる可能性もありそうですね。

phpはある意味簡単にフォーム処理などが出来てしまい、「本当にこれでいいの?」とあっけに取られてしまうことがあります。確かに処理は出来ているけれど、悪用が出来ないかどうかを考え始めると、夜も眠れなくなります。(涙)
Parent: 1411  reply: 1420 返信 編集 削除

[1420] 共有サーバは・・・

user: シロウ ホームページ | created: 2004-03-18 19:06
共有サーバではセーフモードでも、かなり危険な気がしてきました。
PHPがモジュールとして組み込まれていたら(実行ユーザーwwwとか?)、危険度は想像を絶するものです。
安易なファイル名はつけられません。
define.incとか……。

proxyは考えていませんでした。
proxyを使うときは大抵悪さをする前提で使うことが多いもので。しかし、会社などはプロキシ経由は普通ですよね。

もう、祈るしかないですね。
Parent: 1418  reply: 1423 返信 編集 削除

[1423] やはり$SESSION変数の受け渡しが…

user: mowmow | created: 2004-03-18 22:09
一番硬そうなのは、form自体にsession_start()でformID変数を100桁ほど用意しておけば、その認証ではじくことは可能かもしれませんね。これだと簡単にformIDを見抜くことが出来ませんし。

ただ…私はformをhtmlで作成する(幅広い配布が可能で、誰でも作成できるので)方法を取るつもりなので、この方法は使えませんが。
Parent: 1420  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 658 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑