人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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で送っているにもかかわらずログインできるサイトと
できないサイトの違いがわかりません。
原因や実装方法の違いなど知っている方がいましたら
ご教授くださいませ。
よろしくお願いします。

●質問者: kamesann
●カテゴリ:インターネット ウェブ制作
✍キーワード:LOGiN password PHP URL Web
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● blogen
●20ポイント

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ではログインできないことになります。

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


2 ● たーちゃん
●20ポイント

PHP スーパーグローバル

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

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

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


3 ● ardarim
●20ポイント

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


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


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


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


4 ● uunfo
●20ポイント

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


5 ● shopnet
●20ポイント

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とも受け付けるかと思います。

◎質問者からの返答

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

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

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

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

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

皆さん

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ