前端收集用户数据时如何遵守目的限制原则?
我们做了一个用户调研功能,只打算用邮箱做问卷回访,但同事说如果代码里把邮箱传给其他接口可能违反隐私法规,我有点懵——只要我不真用,光传过去也算违规吗?
现在代码是这样,提交后除了发给调研服务,还顺手传给了内部埋点系统(说是方便分析用户来源):
<template>
<form @submit.prevent="submitSurvey">
<input v-model="email" type="email" placeholder="请输入邮箱" />
<button type="submit">提交</button>
</form>
</template>
<script>
export default {
data() {
return { email: '' }
},
methods: {
async submitSurvey() {
await this.$http.post('/survey', { email: this.email }); // 调研用途
await this.$http.post('/tracking', { email: this.email }); // 埋点用途
}
}
}
</script>
是不是第二个请求就踩了“目的限制”的红线?就算埋点系统承诺不用于其他场景也不行?
简单说:只要用户不知道或者没同意,就算你传过去啥也不干,也是违规。
解决方案很简单,别传邮箱到埋点系统就完事了。埋点要分析用户来源,有几种常见做法:
第一种,用匿名ID替代。比如生成一个随机的device_id或者session_id,埋点系统记录的是这个ID而不是邮箱。这样你能知道是哪个用户提交的,但邮箱只在调研系统里存着。
第二种,后端关联。前端只管把邮箱发给调研接口,后端在处理的时候自己悄悄记一笔"这个邮箱是通过XX渠道来的",不需要前端传两份。
第三种,如果确实需要跨系统关联用户,那就得在收集数据的时候明确告诉用户了,比如表单里加个勾选框"愿意被记录以便后续分析",这算单独授权。
你们现在代码最大的问题就是第二个请求把敏感个人信息传给了非必要的系统,GDPR和国内个人信息保护法都不太待见这种操作。改掉就完事儿,别给自己找麻烦。