避免URL参数操纵



因此,在我的情况下,在用户选择某个房间、他将入住的夜晚数量和客人数量后,价格会被计算出来(取决于某些因素(,然后他们会被重定向到付款页面,在那里他们会看到总价,用户可以通过操纵url中的价格参数来更改总价。

在预订页面上:

<Link to={"/book?pricetotal="+total_prices+"&title="+title+"&img="+img+"&price="+price+"&checkin="+checkkin+"&checkout="+checkkout+"&idr="+idroom} >

在付款页面上,我使用

const windowUrl = window.location.search;
const params = new URLSearchParams(windowUrl);

然后我用得到参数

params.get('price')

我找到的解决方案是加密Url参数的内容,然后解密它。解决方案是否足够有效,或者是否有其他方法可以实施?

客户端上的任何都可能被感兴趣的人拦截和操纵。如果你真的担心安全性,加密可能是不够的,因为用户可以检查生成链接的代码,也许还可以对其进行逆向工程

你不能相信在客户身上做的任何事情。相反,当用户做出选择时:

用户选择某个房间后,他将入住的夜晚数量和客人数量

保存此数据服务器端,如果用户还没有会话ID,则为其提供会话ID。然后,当他们结账的时候,你可以计算服务器端的总数,然后以某种方式向用户显示。是的,不要把它放在URL参数中,因为这对某人来说太容易搞砸了,即使是无意的——但把它放进去,例如,在响应提取请求时,或者放在页面上的数据元素中,都会起作用。

当用户输入他们的支付信息并提交时,使用他们的会话ID来确定他们选择的价格。使用这种方法,即使有人决定破坏客户端脚本来显示其他内容,也不会影响最终价格——他们只会破坏他们的视图(如果他们这样做,结果会造成任何混乱(。

这是行不通的,因为您在前端进行加密和解密。

一个可行的解决方案是发送产品,而不是产品的价格。然后,当你向后端发送付款请求时,也发送产品,并在后端计算向用户收取多少费用。

我的解决方案是在链路反应路由器中传递道具

<Link to={{pathname:`/book`,state: { total_prices,title,img,price,checkkin,checkkout,idroom },}}  >

并使用在我的其他功能组件中访问它们

const location = useLocation()
console.log(location.state)

最新更新