# 高级欺诈检测

了解开发人员可用来最大化 Stripe 的欺诈付款预防功能的工具。

[Stripe.js](https://docs.stripe.com/js.md) 是 Stripe 的 JavaScript 库，旨在助力企业安全地从客户浏览器中收集敏感支付信息。而 [Stripe In-App Payments](https://docs.stripe.com/payments/mobile.md) 则为 Stripe.js 提供了原生的 iOS 和 Android 对应版本。

Stripe.js 和移动端 SDK 通过分析有关设备特性和用户活动的风险因素来提供高级欺诈检测，从而有效区分合法交易与欺诈交易。这些风险因素为 Stripe 的欺诈预防系统（例如 *Radar* (Stripe Radar helps detect and block fraud by using machine learning. It's built into Stripe and requires no additional setup to get started)）提供支持。风险因素通过定期向 `m.stripe.com` 端点发起请求，传输到 Stripe 的后端。

此外，在您加载 Stripe.js 的每个页面上，都可以加载 hCaptcha。hCaptcha 是一种验证码，有助于阻止欺诈，并向 Stripe 提供额外的风险因素作为判断依据，同时对合法客户的干扰较少。如需选择不使用 hCAPTCHA 集成，请联系 [Stripe 支持团队](https://support.stripe.com/contact/login)。

我们的目标是在最大化合法客户支付成功率的同时，最大限度地减少欺诈。欺诈是运营在线业务最具挑战性的方面之一。即使是通常不会遇到大量欺诈的企业，也可能遭遇突发、意外且代价高昂的攻击。Stripe 每月为 Stripe 商家阻止超过 5 亿美元的支付欺诈。为此，我们收集和分析有助于识别恶意行为者和机器人的信息，包括交易数据（如金额、客户收货地址、日期等）以及先进的欺诈检测风险因素（设备和活动风险因素）。

我们收集的内容及具体使用方式[隐私政策](https://stripe.com/privacy)和 [Cookie 政策](https://stripe.com/cookies-policy/legal)均有说明。

## 风险因素的类型

### 设备特征

设备特征是关于客户浏览器、屏幕或设备的风险因素。它们帮助 Stripe 识别与异常浏览行为一致的配置，并将此行为与 Stripe 网络上其他商家观察到的类似模式进行比较。这些参数中，罕见或不太可能反映真实用户计算环境的组合，能够揭示欺诈交易。

### 活动指示器

高级欺诈检测风险因素还包括来自真实购物者的活动指标，帮助我们将合法购物者与欺诈性购买者及机器人区分开来。例如，机器人在网站和结账表单上的操作速度往往远比真人更快；银行卡号也经常通过复制粘贴而非手动输入。这些风险因素包括鼠标活动指标以及用户在购物时在不同页面上停留的时间，两者都能在整个会话期间有效预测类似机器人的行为。

Stripe 仅在页面内容与 Stripe Elements 中的输入字段对应时才会收集相关数据。例如，Stripe 可能会收集电子邮箱地址，用于预填 Link 的注册和登录。如果 Stripe Element 中没有电子邮箱字段，Stripe 就不会从页面内容中收集该信息。此类信息绝不会被保存。与用户活动相关的风险因素仅限于单个网站或应用中的单次购物会话，不会在不同的购物会话、网站或应用之间进行关联。

## 何时收集风险因素

Stripe 的欺诈引擎能够观察到的活动越多，Stripe 的欺诈预防效果就越好。因此，Stripe 建议在购物体验的每个页面（而不仅仅是结账页面）都包含 Stripe.js。这种 Stripe.js 的覆盖程度能为 Stripe 提供最丰富的风险因素集，从而更好地将欺诈性购买者与真实客户区分开来。

如果根本不使用 Stripe.js，则商家必须承担 *PCI 合规* (Any party involved in processing, transmitting, or storing credit card data must comply with the rules specified in the Payment Card Industry (PCI) Data Security Standards. PCI compliance is a shared responsibility and applies to both Stripe and your business)的全部责任，并承担额外的欺诈风险。

当 SDK 对象实例化时，iOS 和 Android SDK 会收集应用的高级欺诈检测风险因素。这些数据仅在发起令牌化请求时才会传输到 Stripe。

## 数据隐私

根据我们的[隐私政策](https://stripe.com/privacy)，这些高级欺诈检测风险因素数据绝不会用于广告，也不会被出租、出售或提供给广告商。Stripe 仅将这些数据用于欺诈检测和安全目的，并仅在欺诈检测和安全所需的期限内保留这些数据。

在内部，这些数据会受 Stripe 严格的访问控制策略约束，并且仅限于从事欺诈预防和安全工作的少数 Stripe 员工。

## 禁用高级欺诈检测

Stripe 用户可以决定在自己的网站和应用上禁用高级欺诈检测风险因素的收集。这样做会增加遇到欺诈的风险，尤其是[银行卡测试攻击](https://docs.stripe.com/disputes/prevention/fraud-types.md#card-testing)。Stripe 将继续在 Stripe 域名上收集欺诈检测风险因素，例如 [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) 支付页面。

此外，禁用高级欺诈检测并不影响收集客户在您的结账页面与 Stripe 管理的字段交互时所记录的事件（我们用这些事件来防止欺诈并确保 Stripe Elements 正常工作），也不影响在 [3DS 2.0 验证](https://support.stripe.com/questions/3d-secure-2-device-information)过程中收集的基本设备信息（我们需要将这些信息发送给发卡行进行风险分析）。

### Stripe.js

要通过 [Stripe.js](https://docs.stripe.com/js/including) 禁用高级欺诈检测风险因素，请在 Stripe.js 脚本标签中将 `advancedFraudSignals` 设置为查询参数，或更新到最新版本的 [Stripe.js 模块](https://github.com/stripe/stripe-js)，使用 `pure` 导出，并调用 `setLoadParameters`：

#### HTML

```html
<script src="https://js.stripe.com/endive/stripe.js?advancedFraudSignals=false"></script>
```

### iOS SDK

要通过 [Stripe iOS SDK](https://github.com/stripe/stripe-ios) 禁用高级欺诈检测风险因素，请更新至 iOS SDK v19.1.1 或更高版本。在配置 Stripe SDK 时，设置 `advancedFraudSignalsEnabled` 属性：

#### Swift

```swift
StripeAPI.defaultPublishableKey = "<<YOUR_PUBLISHABLE_KEY>>"
StripeAPI.setAdvancedFraudSignalsEnabled(false)
```

### Android SDK

要通过 [Android SDK](https://github.com/stripe/stripe-android) 禁用高级欺诈检测风险因素，请更新至 Android SDK v14.4.0 或更高版本。在配置 Stripe SDK 时，需在实例化或访问任何 Stripe SDK 对象之前设置 `advancedFraudSignalsEnabled` 属性：

#### Kotlin

```kotlin
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()

        Stripe.advancedFraudSignalsEnabled = false

        PaymentConfiguration.init(
            applicationContext,
            "<<YOUR_PUBLISHABLE_KEY>>"
        )
    }
}
```
