我目前正在设计一个端点来验证客户,他们可以传递他们的邮政编码或姓氏,以及他们的客户 ID(加上一些其他不相关的数据)。
我听说在查询字符串中包含 PII 或敏感数据可能会存在安全风险。除了不包括密码等明显的内容之外,我找不到关于此的大量信息。
此端点对邮政编码或姓氏使用一个查询字符串参数(显然不理想,但这是一个限制)。如果某人可以访问服务器日志,是否可以关联来自一个用户的多个请求,这可能导致通过组合邮政编码和姓氏来识别该人?至少可以通过查看他们的浏览器历史记录来实现这一点,因此这可能是一个问题。
以 POST 请求的形式进行此验证会更好吗?我不确定在什么时候它会成为安全风险,什么样的数据可以安全地包含在查询字符串中,以及在什么时候数据会成为个人身份,或者这是否确实是一个问题。
编辑:查看 Stripe 和 Shopify 等流行的 API,它们似乎使用查询字符串进行客户搜索,但 Salesforce 使用 POST 进行搜索,因此不太确定该走哪条路。
目前我们正在考虑将其作为 POST 进行,但这可能会违反 REST,因为我们正在“获取”客户的有效性,而不是真正进行搜索,而 POST 更适合搜索。
是否可以从 ISP 运营的代理服务器获取 Web 服务器日志,通过 IP 地址将它们关联起来,并收集特定人员的 PII?
是的。
避免将个人姓名、用户 ID 和邮政编码等内容放入 URL 参数字符串中,而是将它们放入请求正文中,确实更安全。当然,这意味着请求不能是 GET 请求。尽可能这样做是对用户隐私的最大尊重。因此,如果您有某种搜索表单或操作,请使用 POST。
至于不是完全RESTful,那又怎样?请记住,REST 在 HTTP 协议设计之后就出现了。用户隐私比遵守一层协议(REST / HTTP / TCP / IP)之上的一层协议的严格理论更重要。