2016-11-29 28 views
1

我正在嘗試更新基於JavaScript的購物車。該產品上市就像基於JavaScript的購物車 - 保護價格屬性

<ul> 
    <li class="product" data-price="5.00"> 
    <h2>Product Name</h2> 
    <p> Product Descriptions> 
    .... 
    <a href="#" onclick="addToCart">$ 5.00</a> 
    </li> 
    <li class="product" data-price="6.70"> 
    <h2>Product Name</h2> 
    <p> Product Descriptions> 
    .... 
    <a href="#" onclick="addToCart">$ 6.70</a> 
    </li> 
</ul> 

和schopping車,我們讀到data-price得到的價格。這意味着如果用戶在Firebug或任何其他工具中更改此屬性,價格會在購物車中自動更改。

我不能重寫整個購物車,但也想確保價格邏輯。有什麼替代方案來解決這個問題

+4

您可以從數據庫中同時插入,而不是依賴於數據的屬性獲取實際價格。 –

+2

永遠不要相信客戶給你正確的價格!或者就此而言,給你任何其他的正確答案。 –

+0

你應該像使用產品名稱一樣使用它,然後進入你的數據庫,你自己得到價格,但它不是最好的理想,但至少如果客戶弄亂了名字,你會發現沒有匹配在分貝,你會意識到有什麼不對 – rule

回答

2

你將需要某種服務器端驗證,以確保價格永遠不會被客戶端操縱。如果您正在嘗試完成整個購物籃和結帳系統客戶端,那麼據我所知,您無法阻止用戶操縱內容。你可以讓他們更難做到這一點,但絕不可能。

最安全的方式,以及我這樣做的方式,只是將產品id存儲在購物籃中。因此,當用戶點擊「添加到購物車」時,您只需添加產品ID即可。無論何時您需要計算籃子總數或獲得單個產品的價格時,您都可以循環瀏覽產品ID並將它們與您在某處明確定義的價格進行匹配。

理想情況下,你會做這個服務器端,並在數據庫中的價格,或類似的東西。對於所有意圖和目的來說,這是不可能的,因爲他們操縱價格。他們能做的最糟糕的事情就是操縱籃子裏的產品id,然後他們最終所做的只是爲了付出錯誤的東西,但是因爲他們正在竭盡全力地打破你的系統,那是他們的問題,而不是你的問題。

如果你真的不能做這個服務器端,無論出於何種原因,那麼你可以改爲將產品價格硬編碼爲JavaScript文件,並檢查這種ID。它不如服務器端安全,但在你的網頁中處理JavaScript文件的內容比編輯dom元素的屬性要困難得多。

下面是使用前端只執行一個非常非常簡單的例子:

var products = { 
    1: 5.99, 
    2: 7.99, 
    3: 2.50 
}; 

var basket = []; 

function addToBasket(productId) { 
    basket.push(productId); 
} 

function getBasketTotal() { 

    var total = 0; 

    basket.forEach(function(productId) { 
     total += products[productId]; 
    }); 

    return total; 
}