1

ユーザーが過去の注文を確認できるように、サイト上で単純な整数を使用して URL を生成しています。

http://site.com/order_id/145323

問題は、その番号を変更して他の人の注文を表示するのが非常に簡単なことです。この番号をURLでエンコードし、phpでデコードしてコントローラーを実行できるようにする簡単な方法は何でしょうか? 非常に安全である必要はありません。誰かが番号を変更してデータを表示するのが簡単ではないものを使用してください。私は次のようなことを試みました:

order_id/<?php echo base64_encode($theOrder); ?>

そして、私が試したコントローラーアクションで:

if($orderId = (int) $this->getRequest()->getParam('order_id') && Mage::getSingleton('customer/session')->isLoggedIn()){         
        $orderId = (int) $this->getRequest()->getParam('order_id'); 
        $orderId = base64_decode($orderId); 
        $order = Mage::getModel('sales/order')->load($orderId);
        Mage::register('current_order', $order);
        $this->loadLayout();
        $this->renderLayout();
    }

しかし、これはうまくいきません。url でこのパラメータを隠すにはどうすればよいでしょうか?

4

3 に答える 3

6

あなたはそれを間違っています。不明瞭にしようとする代わりに、ユーザーに属しているidことを確認する(バックエンドを確認する)必要があります。id

また、IDがそのユーザーに属していない場合は、いずれか403 Forbiddenまたは単にのステータスコードを返します404 Not Found

于 2012-04-04T22:57:49.017 に答える
0

他の人が言ったように、これを修正する最善の方法は、データへのアクセス方法を修正し、リクエストの注文番号がアクセスしようとしているユーザーにリンクされていることを確認することです.

ただし、非常に迅速な修正が必要な場合は、リクエストの HTTP_REFERER が設定されているかどうかを確認できます。設定されていて、サイトのページを指している場合は、これが正当な要求であることを合理的に確信できます。ユーザーが注文番号を修正して URL を変更した場合、HTTP_REFERER は空になります。

これは完全な解決策ではありませんが、閲覧できない注文を閲覧できなくなることは間違いありません。

于 2012-04-05T18:05:11.320 に答える
0

確かに人と注文に関するものであれば、ユーザーテーブルまたはデータストアがあり、ランダムな URL が解析されると、その注文番号が現在ログインしているユーザーに属しているかどうかを確認し、そうであればデータを許可し、そうでない場合は ' を返します許可されていません。ログインしてください」

編集

システムが何を伴うのかはわかりませんが、純粋な仮定で実行すると、これは役立つかもしれません...

USER が注文すると仮定しています。したがって、すべての注文が保存され、そこからフェッチされる ORDERS テーブルがあると仮定しています。

ORDERS テーブルには、注文したユーザーを格納する必要があります。

USERS table
----------
user_id, username, password, full name, dob, etc

ORDERS table
----------
order_id, order_type, quantity, date_ordered, user_id

したがって、SQL クエリを使用して、注文に関連付けられたユーザーを取得できます。

何かのようなものSELECT username FROM users JOIN orders ON users.user_id = orders.uder_id

次に、返されたユーザー名を現在ログインしているユーザーと照合します。

あなたの知性を侮辱しているなら申し訳ありませんが、あなたが何を求めているのか正確にはわかりません!

于 2012-04-04T23:58:02.763 に答える