指南 · 约 3 分钟阅读

阻止结账页上的盗卡 skimmer

skimmer 就是几行 JavaScript,会在顾客输入时复制银行卡信息。下面介绍它们如何进入,以及把它们挡在外面的几层防护。

更新于 · HackGrade

代码和配置保持英文。

skimmer 如何进入

  • 有漏洞的插件或主题让攻击者能够往你的页面或数据库中添加脚本。
  • 你加载的某个第三方脚本(聊天、统计、评价)本身被攻陷。
  • 被盗的管理员密码让别人能把脚本粘贴到主题或“自定义代码”框中。

1. 为结账页上的每个脚本建立清单

列出购物车和结账页上的每个脚本、它归谁负责、为什么需要它。删除其余的脚本。这正是 PCI DSS v4.0 要求 6.4.3 所要求的。

2. 使用托管支付字段

在自己的 iframe 中显示银行卡字段的支付网关(例如 Stripe 的 Payment Element 或 PayPal 的 hosted fields)会让卡号不经过你的页面。skimmer 仍可能注入伪造的表单,所以其他防护层也要保留。

3. 用 CSP 锁定结账页

限制脚本可以从哪里加载,同样重要的是,限制它们可以把数据发送到哪里(connect-src、form-action):

header
Content-Security-Policy: default-src 'self'; script-src 'self' https://js.stripe.com; frame-src https://js.stripe.com; connect-src 'self' https://api.stripe.com; form-action 'self'; object-src 'none'; base-uri 'self'

4. 用 SRI 固定第三方文件

对于来自 CDN 的静态文件,Subresource Integrity 会让浏览器拒绝被改动过的文件:

HTML
<script src="https://cdn.example.com/lib.min.js"
        integrity="sha384-REPLACE_WITH_THE_FILE_HASH"
        crossorigin="anonymous"></script>

经常变动的支付 SDK(例如 Stripe.js)无法用这种方式固定。对它们请使用 CSP。

5. 检测变更

PCI DSS v4.0 要求 11.6.1 要求有办法检测对支付页面脚本和响应头的未授权更改。HackGrade 的 Pro 深度扫描会监控结账脚本中的新来源、改动、向外发送数据的内联代码以及伪造的支付表单。

6. 阻止盗刷测试

机器人会利用防护薄弱的结账页测试被盗的银行卡。开启支付服务商的反欺诈工具,为结账添加 CAPTCHA 或频率限制,并留意成批出现的小额失败订单。

参考资料

相关指南

免费 · 即时 · 无需注册

抢在别人之前了解你的评级。

被动扫描。未经你的许可,不会进行任何攻击性检测。

免费开始。付费套餐每月 12 美元起,或 29 美元购买单次报告。 查看价格