2013-10-04 100 views
1

我正在開發基於OpenCart的電子商務網站,並希望知道如何隱藏通過URL傳遞的變量。我想這樣做的原因是,我們允許客戶在交易成功結束打印他們的發票和URL的結構如下: -隱藏URL中的變量

http://www.mywebsite.com/invoice/standard&order_id=1000010 

現在的問題是,如果你改變order_id的最後一個值作爲其他任何數字,甚至可以更改其他任何數字,它將顯示該訂單號的發票,如果該訂單號屬於另一個客戶,它將向該客戶顯示其詳細信息。

所以現在我想知道的是,有沒有一種好的方法來加密這個URL並在服務器端解密它以完成請求而不顯示用戶order_id

請讓我知道你是否需要更多的信息,我會嘗試並將其添加到我的問題。

+1

你出於某種原因不能使用'POST'數據?此外,如果訂單是安全信息,則您應該只允許它們以適當的授權用戶身份進行展示,因爲無論如何,這都是安全風險。 – Cyclone

+0

有一種叫'POST'方法和'HIDDEN'變量發送。 –

+1

爲什麼不在會話中保存變量? –

回答

2

您應該不需要真的這樣做,而應該在模型/數據庫文件中驗證該發票的登錄用戶。

例如....

我假設,因爲它代表,你的數據庫的查詢將類似於此:

$this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = `" . (int)$order_id . "`"); 

您應該檢查也檢查CUSTOMER_ID:

$this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_id = `" . (int)$order_id . "` AND customer_id = '" . (int)$this->customer->getId() . "'"); 

如果發票不屬於該客戶,則不會找到任何結果。

4

我沒有使用Opencart的經驗,但它可能會檢查當前用戶是否已登錄,並且只有在屬於他們的情況下才顯示發票。

如果不是這種情況,應該修正底層問題,並限制客戶(例如通過登錄系統)訪問發票,而不是創建security through obscurity

2

我還沒有使用Opencart,但我相信order_id顯示在URL中並不是大問題。這裏的主要問題是其他用戶可以查看其他用戶的發票。您必須爲這些非公開頁面執行access control。只允許所有者查看自己的發票。

現在要回答你的問題,爲了防止你的訂單號顯示在網址上,你需要使用POST數據,目前您使用的是GET。您可以使用$_POST訪問POST數據。

+0

只使用'POST'而不使用'GET' **實際上不是解決方案** - 我可以使用任何最簡單的工具通過自動增加'order_id'對您的站點執行數千個'POSTs',驚訝我可以得到多少信息... – shadyyx

+0

你是對的。我沒有說'POST'而不是'GET'是解決方案。我分兩部分來討論這個問題,一個是我提出'訪問控制'的安全性。 在第二部分中,我提到了**來回答您的問題**,我清楚地說明了如何防止在URL中顯示order_id,這是提問者想要解決的確切問題。 –

1

這不是一個標準功能,因此您應該聯繫該擴展的開發人員。如果您的商店允許訪客結賬,那麼該網址應包含某種類型的隨機密鑰或附加到該訂單的電子郵件地址,以確認該請求僅來自授權用戶。如果訂單是註冊用戶,那麼分配給訂單的customer_id應該針對當前登錄用戶進行驗證,如果用戶未登錄,則重定向到登錄