英文:
Stripe Portal url not secure Python
问题
我正在开发一个与Stripe集成的Django应用程序,我面临一个与通过Stripe门户管理用户订阅相关的安全问题。目前,我为具有订阅的用户提供一个简单的链接以访问门户。但是,我注意到如果我从视图生成的浏览器标签中复制链接,并将其粘贴到另一个浏览器中的私人标签中,门户就会加载,允许访问其他人的订阅详细信息。
示例生成的URL:
https://billing.stripe.com/p/session/test_YWNjdF8xSGFuNG5KV3p0WnBRQUJ4LF9POHM5UWlrYlhtM0FadVZmV3NUU3hQFMrgrrgg0HK1DtM1hxe
这带来了重大的安全问题,因为未经授权的用户如果获取了URL,有可能操纵订阅者的计费信息。
所以我的视图:
def customer_portal(request):
# 认证您的用户。
customer_id = request.user.customer.id
# 创建一个会话。
session = stripe.billing_portal.Session.create(
customer=customer_id,
return_url='http://127.0.0.1:8000/account/billing/',
)
# 直接重定向用户到门户。
return redirect(session.url)
链接:
<h4><a href="{% url 'subscriptions:customerPortal' %}">管理计费</a></h4>
URLs:
path('billing/portal/', customer_portal, name='customerPortal'),
我做错了什么吗?
英文:
I'm working on a Django application integrated with Stripe, and I'm facing a security issue related to user subscription management through the Stripe portal. Currently, I provide a simple link for users with subscriptions to access the portal. However, I've noticed that if I copy the link from the browser tab that the view generate and paste it into a private tab in another browser, the portal loads up, allowing access to someone else's subscription details.
an example of the url generated :
https://billing.stripe.com/p/session/test_YWNjdF8xSGFuNG5KV3p0WnBRQUJ4LF9POHM5UWlrYlhtM0FadVZmV3NUU3hQFMrgrrgg0HK1DtM1hxe
This presents a significant security concern since an unauthorized user who obtains the URL could potentially manipulate the billing information of a subscriber.
so my view :
def customer_portal(request):
# Authenticate your user.
customer_id = request.user.customer.id
# Create a session.
session = stripe.billing_portal.Session.create(
customer=customer_id,
return_url='http://127.0.0.1:8000/account/billing/',
)
# Directly redirect the user to the portal.
return redirect(session.url)
the link :
<h4><a href="{% url 'subscriptions:customerPortal' %}">Manage Billing</a></h4>
the urls :
path('billing/portal/', customer_portal, name='customerPortal'),
I'm doing something wrong ?
答案1
得分: 0
该网址是一个短期有效的网址,是的,您的应用程序需要确保只将该网址提供给经过身份验证的客户。否则,您可以使用无代码选项的全局链接,该链接需要通过电子邮件登录。
英文:
The url is a short lived URL and yes, your application would need to make sure to only give the URL to an authenticated customer. Otherwise, you can use a no-code option global link which requires login by email.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论