跳转至

隐私与数据脱敏

隐私规则应在数据进入 RUM 或 Log 队列前生效。C# 与 Native C/C++ 都支持 URL Query 脱敏;C# 还支持 HttpClient Header 脱敏。

默认行为

数据 .NET / C# Native C/C++
URL Query 保留非敏感值,默认敏感参数替换为 <redacted> 相同
HTTP Header 默认采集并脱敏认证类 Header Native Resource 当前不采集请求/响应 Header
用户与自定义属性 应用写入前负责业务脱敏 相同
Log 内容与属性 应用写入前负责业务脱敏 相同
Trace Header 仅发送到 ShouldTrace/should_trace 允许的目标 相同

默认敏感 Query 名包括 tokenaccess_tokenrefresh_tokenclient_secretpasswordsecretapi_keyapikeyauthauthorization

C# 隐私配置

RumSdk.Init(new RumConfig
{
    DatawayUrl = "https://openway.guance.com",
    ClientToken = "<client-token>",
    RumAppId = "<rum-app-id>",
    Privacy = new RumPrivacyConfig
    {
        CaptureHttpHeaders = true,
        CaptureUrlQueryString = true,
        RedactAllUrlQueryValues = false,
        RedactedValue = "<redacted>",
        RedactedHeaderNames = new[]
        {
            "Authorization",
            "Cookie",
            "Set-Cookie",
            "X-Api-Key"
        },
        RedactedQueryParameterNames = new[]
        {
            "token",
            "password",
            "secret"
        }
    }
});
参数 默认值 说明
CaptureHttpHeaders true 是否记录脱敏后的请求和响应 Header。
CaptureUrlQueryString true 是否保留 URL Query。关闭后移除整个 Query。
RedactAllUrlQueryValues false 是否隐藏全部 Query 值。
RedactedValue <redacted> 脱敏替换文本。
RedactedHeaderNames 认证类 Header Header 名单,不区分大小写。
RedactedQueryParameterNames 敏感参数名单 Query 参数名单,不区分大小写。

Native C/C++ 隐私配置

const char* redacted_names[] = {
    "token",
    "password",
    "secret"
};

guance_rum_resource_collection_config privacy;
guance_rum_resource_collection_config_init(&privacy);
privacy.capture_url_query = 1;
privacy.redact_all_url_query_values = 0;
privacy.redacted_value = "<redacted>";
privacy.redacted_query_parameter_names = redacted_names;
privacy.redacted_query_parameter_name_count = 3;

guance_rum_configure_resource_collection(rum, &privacy);

初始化函数会写入默认敏感参数名单。配置函数复制字符串数组,但保留 should_collectuser_data;回调必须在重新配置或关闭前保持有效。

关闭网络数据采集

RumSdk.EnableAutomaticInstrumentation(new AutomaticInstrumentationOptions
{
    EnableHttpClient = false,
    EnableWebView = false
});

只关闭 Header 或 Query:

Privacy = new RumPrivacyConfig
{
    CaptureHttpHeaders = false,
    CaptureUrlQueryString = false
}
guance_rum_resource_collection_config resource_config;
guance_rum_resource_collection_config_init(&resource_config);
resource_config.enabled = 0;
guance_rum_configure_resource_collection(rum, &resource_config);

目标过滤

Native Resource 可以通过 should_collect 过滤采集目标;C# 应在业务 Handler 或手动 Resource 边界执行同等过滤。Trace Header 必须通过 Trace 配置中的目标白名单限制到可信服务。

用户、Log 和自定义字段

  • 不要写入密码、Token、身份证件、支付信息或完整认证 Header。
  • 用户 ID 应使用业务允许的稳定标识或哈希值。
  • Log 内容与属性不会自动理解业务敏感字段,应用必须在 AddLog() 前脱敏。
  • 自定义属性不能覆盖 SDK 保留字段;冲突字段会被忽略。

Session Replay 隐私

实验性能力

Session Replay 默认关闭,可以显式开启验证,但仍为实验性能力。开启前必须确认默认策略和元素级覆盖满足业务隐私要求。

.NET 初始化配置支持文本/输入、触摸和图片隐私:

SessionReplay = new RumSessionReplayConfig
{
    Enabled = true,
    TextAndInputPrivacy = SessionReplayTextAndInputPrivacy.MaskAll,
    TouchPrivacy = SessionReplayTouchPrivacy.Hide,
    ImagePrivacy = SessionReplayImagePrivacy.MaskAll
}

需要覆盖单个元素时:

RumSdk.SetSessionReplayTextAndInputPrivacy(
    passwordBox,
    SessionReplayTextAndInputPrivacy.MaskAll);
RumSdk.SetSessionReplayTouchPrivacy(
    paymentPanel,
    SessionReplayTouchPrivacy.Hide);
RumSdk.SetSessionReplayImagePrivacy(
    identityImage,
    SessionReplayImagePrivacy.MaskAll);
RumSdk.SetSessionReplayHidden(customerIdentityPanel);

Electron 和 WebView2 的 Browser collector 从原生 Bridge 的 getPrivacyLevel() 读取 allowmask-user-inputmask。隐私级别必须由原生可信配置决定,Renderer 不能自行放宽。

文档评价

文档内容是否对您有帮助? ×