可以从开发者控制台修改重要数据。我该怎么办?

信息安全 Web应用程序 php javascript html json
2021-09-04 01:42:45

场景:我有一个使用在服务器端编码的 JSON 使用 JavaScript 生成的待办事项列表。我将待办事项 id 放在 HTML id 属性中。所以过程是这样的:

  1. 服务器端代码创建一个 todo 数组。
  2. 将数组序列化为 JSON
  3. 遍历 JSON 对象数组并呈现待办事项列表。

现在我必须编辑某个待办事项并更新它。它是这样完成的:

  1. 我通过比较来自 HTML id 属性值的待办事项 id 来按 id 过滤我的 JSON 对象数组以获取对象。
  2. 我使用 AJAX 将对象传递给INSERT.PHP页面。
  3. INSERT.PHP页面中,我对 JSON 进行反序列化,以便可以在数据库中对其进行更新。

问题:将待办事项 ID 放在 HTML id 属性中会导致系统出现缺陷,因为用户可以使用浏览器开发者控制台更改待办事项 ID。

问题:有安全的方法吗?我只是做错了还是这是正常的事情?

2个回答

您问题中的大多数细节都无关紧要。ID 存储在 HTML id 属性中,开发人员工具,您正在使用 jQuery ......这些都不重要。

唯一重要的是您的服务器上有一个名为insert.php. 无论您的客户端代码是什么样的,攻击者都可以向该端点发送他们想要的任何请求对试图做他们不允许做的事情的人的保护必须在服务器上,而不是在客户端上。

所以看看你的PHP代码。它是否验证输入是否为预期格式?它是否检查用户是否有权编辑特定的待办事项列表?如果没有,请修复它。请记住,您的验证和授权检查必须在服务器上执行才能具有任何安全价值。

具体来说,如果只允许用户编辑他们拥有的待办事项,您需要在 中执行以下操作insert.php

  • 查询数据库以获取正在修改的待办事项的所有者。
  • 获取发出请求的用户的 ID。
  • 检查它们是否相同,如果不同则否认。

您描述的与 AJAX 相关的东西并不重要,您不应该信任客户端(浏览器),而是 insert.php 脚本应该验证信息。

您需要考虑您正在验证的内容 - 在待办事项列表的情况下,只需确保他们发送的 ID,他们具有修改/等的相关权限。如果有人确实手动向您的 insert.php 脚本发送请求,它应该能够抵抗您需要的任何内容(即,它是否属于他们/他们应该有权编辑它/是否待办事项列表项被锁定/等)。

在任何情况下,您都不应信任客户端/浏览器发送给您的数据并验证服务器端的所有内容。您可能还想考虑,而不是让 insert.php 脚本似乎只是插入一个 JSON 对象,您可以为您的 AJAX 请求创建一个 API,而不是只插入 JSON 对象而不验证任何相关内容。