【问题标题】:How to pass a critical data from JavaScript to flask securely?如何将关键数据从 JavaScript 安全地传递到烧瓶?
【发布时间】:2021-09-28 17:01:45
【问题描述】:

我想在贝宝支付完成后将 JSON 对象中提供的一些详细信息传输到烧瓶路线。目前我所做的是我隐藏了表单字段,当付款被批准时,我将值传递给表单,然后提交表单,以便可以使用 form.fieldname.data 在烧瓶中访问表单中的数据并获取支付的金额。但是这样做的风险太大,客户只需通过inspect元素就可以轻松地将表单中的金额字段更改为任意金额。

我的烧瓶功能

@app.route('/addpoints', methods=['GET', 'POST'])
def add_points():
    form = PointsForm()
    if form.validate_on_submit():
        print(form.amount.data)

这是支付被批准时的Paypal功能。

onApprove: function(data, actions) {
      return actions.order.capture().then(function(details) {
        console.log('hello');
        document.getElementById("name").value = details.payer.name.given_name;
        document.getElementById("paidamount").value = details.purchase_units[0].amount.value;
        button.click(); // submit button
});
}

如何安全地传输这些数据,以便客户在提交前无法编辑表单?我考虑过将 json 对象保存到服务器文件夹,然后从烧瓶访问文件,但客户端仍然可以通过在保存文件部分提供一个 json 对象来编辑正在保存的 json 对象。

【问题讨论】:

  • 金额何时获批?当用户付款时,您为什么不将金额发送到烧瓶。 iser 如何通过输入表格支付金额?另一件事是使用您可以使用ajaxfetch api 的表单,这将通过javascript 发送金额。如果你愿意,我可以为你提供一个使用 jquery 的 ajax 示例。

标签: javascript flask paypal


【解决方案1】:

如果您需要在服务器中存储信息,则不应使用客户端 actions.order.create / actions.order.capture 。更改为适当的服务器端集成。

在您的服务器上创建两条路由,一条用于“创建订单”,一条用于“捕获订单”,documented here。这些路由应该只返回 JSON 数据(没有 HTML 或文本)。后者应该(成功时)在返回之前将付款详细信息存储在您的数据库中(特别是purchase_units[0].payments.captures[0].id,PayPal 交易 ID)

将这两条路线与以下批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server

至于将数据传输到您的服务器,请不要在捕获后使用表单 POST。在进行捕获的调用中包含信息,作为 fetch 调用中的附加主体。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 2019-04-02
    • 2017-02-21
    • 2020-09-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多