我实现的加入/移出购物车功能是否存在安全风险?
该实现存在的安全及规范问题
- 使用GET请求执行数据修改操作
HTTP协议规范要求GET请求为幂等请求,仅用于资源查询,不应触发数据修改逻辑。当前实现用GET处理加购操作会导致两个核心问题:一是CSRF攻击成本极低,攻击者只要构造一个/add-to-cart/xxx的链接诱导已登录用户点击,就会自动将对应商品加入用户购物车;二是搜索引擎爬虫遍历站点链接时,会无意中触发大量无效加购操作,污染业务数据。 - 缺少CSRF防护校验
Django默认开启CSRF中间件防护跨站请求伪造攻击,当前无论是GET请求(本身不该用于修改操作)还是后续如果改成POST请求,都没有携带CSRF Token进行校验,相当于完全暴露在CSRF攻击风险下。 - 会话数据未做合法性前置校验
视图函数中直接通过request.session['cart']取值,当新用户首次访问站点、session中还未初始化cart字段时,会直接抛出KeyError异常,触发服务端500错误。 - 未校验商品主键的合法性
传入的product_pk没有查询数据库校验是否为真实存在的在售商品主键,攻击者可以随意传入不存在的ID、超长字符串、特殊字符等恶意数据,直接存入session中,不仅会产生大量垃圾数据,后续如果直接使用这些无效ID查询数据库,还可能引发性能问题或注入风险。 - 没有加购频次和数量限制
当前实现没有任何请求频率校验、购物车商品数量上限校验,攻击者可以通过脚本批量刷接口,短时间内向购物车塞入数万条数据,撑爆用户session存储,甚至占用大量服务端资源引发服务卡顿。 - 请求参数无过滤逻辑
product_pk在URL中直接传递,没有做长度、字符类型过滤,攻击者可以传入构造的恶意字符串,尝试触发注入、XSS等潜在攻击风险。
内容的提问来源于stack exchange,提问作者gfdb
相关产品推荐
相关产品推荐

