2012-01-15 15 views
-1

私は自分のサイトでこれを自分自身で確認することができますので、私は非常に興味があります。例は次のようになります。フェイスブックを使用している場合サイトでユーザーがURLに独自の値を挿入したかどうかを確認する方法

www.somesite.com/product.php?id=1356

、ユーザーがそれを変更することができますし、彼らはこのIDに関連付けられているユーザーを取得します。しかし、他のサイト、特にeコマースサイトでは、変更すると失敗するか、ホームページに移動します。

+0

これは"get"メソッド。基本的には、情報を「投稿」するときのフォームのようですが、URL自体にデータがあります。 PHPの情報はフォームと同じ方法で取得します。たとえば、そのIDが存在しない場合は、ホームページまたは不明なページにリダイレクトできます。 Facebookには多くのURLがあるので、1つのURLを押す可能性はかなり簡単です。 – Matt

+0

私はそのことを知っていますが、そのサイトがそのIDを持っていた例がありました。私は自分自身をチェックしましたが、私がそれを入れたときには機能しませんでした。だから私はその単純な検証とは思わない。 – Andy

+0

コードを投稿する必要があります。なぜなら、それが動作するからです。それは、あなたがどのようにデータを処理するかはあなた次第です。それは自動的に起こるだけではありません。 – Matt

答えて

3

ユーザーが変更したかどうかを確認する方法はありません。これは安全なコーディングの一部です。サーバーの観点からは、すべての入力を検証し、現在のユーザーが要求しているリソースに実際にアクセスする必要があることを検証する必要があります。

追加の詳細と例については、https://www.owasp.org/index.php/Top_10_2010-A4を参照してください。

あなたがアクセスしようとしているユーザープロファイルIDがあなたに公開されている可能性があるため、Facebookはこれを許可しているように見えるかもしれません。ただし、他のすべてのユーザープロファイル(アクセス権のあるユーザープロファイルのみ)にはアクセスできません。私のFacebookのプロフィールIDにアクセスしようとすると、ここであなたのアクセスが拒否されることになります。

これは電子商取引としてタグ付けされているため、もしあなたがまだいない場合は、PCIDSSも知っておくべきです。6.5.4: "安全でない直接オブジェクト参照"がこのシナリオに特に適用されます。 $ _GET方法(または$ _REQUEST)を介して動作します

+0

私は完全に理解しています。しかし、これは、サイト上の特定の製品に対して有効なIDを入力すると、機能するはずですが、そうではありません。だから私はちょうど興味があった。 – Andy

+1

@Andy - これを見た場所の特定の例を提供してください。私は興味がある。 – ziesemer

+0

私はあなたのリンクをもっと深く見ました@ziesemerありがとうございました。それは私に正しい方向に良い点を与えました。 – Andy

0

Facebookを使用している場合、ユーザーはそれを変更して、このIDに関連付けられたユーザーを取得できます。しかし、他のサイト、特にeコマースサイトでは、変更すると失敗するか、ホームページに移動します。

Facebookは同じことをします。

https://www.facebook.com/profile.php?id=102934810293841029348は、そのIDが存在しないため、「Profile Unavailable」というエラーページに移動します。

存在しないIDに変更する可能性があります。

+0

本当ですか? URLのユーザーIDを変更していて、うまく機能していたからです。あなたはいくつかの場所を先に入力していますか?私は任意の数字を入力していると言っているわけではありません。私はそれらがサイトをサーフィンしている私のために存在することを知っています。 – Andy

+0

彼らはHTTP_REFERERをチェックしている可能性がありますが、実際には例を見ることなく答えられる方法はありません。最終的には、ほとんどの状況でユーザーエクスペリエンスが悪くなります。 – ceejayoz

+0

入力いただきありがとうございます@ceejayoz – Andy

0

...

あなたには、いくつかのサイトIDを変更することができた理由、それは動作しますが、彼らはそれをプログラムの開発ので、それをすることです。 )...これは単にためsecurity..For例であれば、たとえば、product.phpであなたはそのようなプログラムの開発があるため、変更することはできませんいくつかのidがあることを、この

if(isset($_GET['id']) { 
    $id = $_GET['id']; 
    $id = filterid(id)..... and so ... 
} 

理由のようなものを持っていますページがあり、IDが数字でなければならないことを知っています。データベースの最大IDはたとえば15000です。このようなものを書くことができます。

if(isset($_GET['id'] && strlen($_GET['id']) <= 5 && isNumeric($_GET['id']) { 
     //if everything is ok you can execute your code here 
} 
else { 
     $id = 1; //if someone try to put something else in id, you will simply redirect him on first id(firs product) 
} 
+0

もう一度、商品IDが存在することを確認したが、それでも機能しなかった。しかし、私はあなたが意味することを理解しています。私はちょうどその方法を理解したいと思います。ユーザー入力とクリックしたものを区別する方法がない場合、少なくとも自分のユーザー入力が間違いなく有効であることを知っているからです。 – Andy

+0

あなたはいつもあなたのコードをあなたのURLで動かすように修正することができます....私はこれで何を意味するのですか?例えば、Something .....あなたのURLが変更されるこのリンクをクリックすると....あなたが$ _GETメソッドを使ってこの事例を検証することができます。if($ _ GET ['action'] == send_mail)send_mail() ; – cool

+0

しかし、あなたが依存する変数を使って作業しているのであれば、データベースから取り出すことができます。正しいものとできないものを分け合わせることはできません...ユーザーは何を望みか入力できます...しかし、良い入力はデータベースに入ります...(たとえば、PDOと準備文を使用して).....数値のチェック...チェック値...チェックレター...正規表現...など – cool

関連する問題