PHPやWebの知識がある方にお伺いします。


ログインを求めるサイトでPOSTでloginのPHPに
ユーザ名(id)とパスワード(password)を渡しているとします。
こういったサイトでURLで以下のように引数を指定すると
http://xxxx/login.php?id=xxxx&password=xxxxxx
大半のサイトはログインが成功します。
#もちろんphpファイル名,id,passwordの部分はサイトにあわせます。
なので、よくこのURLを作成しお気に入りに登録しログインを
簡易化しています。
しかし、中には同じPOSTでも同様にURLで引数を指定して
ログインできないところがあります。
GETはできてPOSTはできないとかでしたら理解できるのですが、
同じPOSTで送っているにもかかわらずログインできるサイトと
できないサイトの違いがわかりません。
原因や実装方法の違いなど知っている方がいましたら
ご教授くださいませ。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2007/03/02 00:59:11
  • 終了:2007/03/09 01:00:13

回答(5件)

id:blogen No.1

blogen回答回数63ベストアンサー獲得回数12007/03/02 11:49:22

ポイント20pt

hidden で何か値を渡しているのかもしれません。

<input type="hidden" name="hidden_value" value="true"/>

この場合なら

http://xxxx/login.php?id=xxxx&password=xxxxxx&hidden_val...

となります。

または referer を見ているのかもしれません。

それから、ふと思ったのですが、

> 同じPOSTでも同様にURLで引数を指定してログインできない

とありますが、

http://xxxx/login.php?id=xxxx&password=xxxxxx

はGETで値を渡していることになります。

login.php がPOSTでの値の受け取りのみを許可して、GETは弾く場合は上記のURLではログインできないことになります。

こちらの勘違いだったらすいません。

id:tarchan No.2

たーちゃん回答回数200ベストアンサー獲得回数22007/03/02 02:06:52

ポイント20pt

PHP スーパーグローバル

http://www.php.net/manual/ja/language.variables.predefined.php#l...

PHPでは、HTTP GETの情報が格納された$_GETと、HTTP POSTの情報が格納された$_POSTが定義済みの変数として利用可能です。

どちらでもアクセスできるページの場合は、その両方の情報が格納された$_REQUESTを利用していると考えられます。

id:ardarim No.3

ardarim回答回数897ベストアンサー獲得回数1452007/03/02 03:19:41

ポイント20pt

hiddenになっているパラメータも含めて必要なものをすべてURLに含めていますか?


パラメータの中にurlencodeが必要な文字が含まれていませんか?


フォームのボタンが実はスクリプトになっていて特殊なPOST送信を行っていたりしませんか?


またリファラによって弾いている可能性があるので、その場合はURL直打ちでは弾かれてしまうと思います。

id:uunfo No.4

uunfo回答回数54ベストアンサー獲得回数62007/03/02 04:12:27

ポイント20pt

PHPではGETの変数(今回の例ではidやpassword)は$_GETで、POSTの変数は$_POSTで参照できます。

一方で$_REQUESTというものもあって、これは$_GET、$_POST、$_COOKIE(クッキーで渡される変数です)の中身がごちゃ混ぜになったものです。$_POSTや$_GETを使わないで$_REQUESTを使っているサイトだと、質問にあるようなお気に入りでのログインが可能になります。


また、プログラム内部の処理で$_GETで取得した値を$_POSTに入れたり、その逆をやったり、または$_GETと$_POSTをごちゃまぜに扱ったりと、$_REQUESTを使用するのと同じことをやっているPHPスクリプトもあるようです。


さらに、古いPHPスクリプトですとregister_globals=onで動作するように作られているのかもしれません。これは$_REQUESTよりもさらに強力なもので$_GETや$_POSTで送られた変数で、グローバル変数を初期化してしまいます。質問のお気に入りの例ですと、$idにはxxxx、$passwordにはxxxxxxが自動的に入ってしまうということです。


GETとPOSTで送られる変数を区別なく扱うのは脆弱性のもととなりますので、質問にあるようなお気に入りでのログインができるサイトはこれから減っていくのではないか、新しくできるサイトではできないことが多いのではないかと思います。

id:shopnet No.5

shopnet回答回数13ベストアンサー獲得回数12007/03/02 09:51:33

ポイント20pt

http://xxxx/login.php?id=xxxx&password=xxxxxx

だとPOSTでは無くて、GETで送っています。

上記ページを表示しているところでPOSTとなっていても、login.phpの方でPOST,GETどちらも受けるようになっていれば、GETで送っても認識してくれます。

要は、login.phpのプログラムしだいです。

$ID = $_POST['id'];

としてあれば、POSTでしか受け付けません。

register_globalsをonとした環境ではGET,POSTとも受け付けるかと思います。

id:kamesann

主にcookieを使うサイトで$_REQUESTで取得した場合に

GETでもPOSTでも取得でき、formでPOSTとなっていても

GETでアクセス可能だったのですね。

調べても分からなくこの場で質問させていただきました。

答えがわかって質問して本当によかったと思いました

皆さん

ありがとうございました。

2007/03/02 20:06:57

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません