首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止参数篡改和保证参数安全的正确方法是什么?

防止参数篡改和保证参数安全的正确方法是什么?
EN

Security用户
提问于 2023-04-12 07:19:17
回答 2查看 69关注 0票数 0

我正在开发一个HTTP服务器。我使用HTTPS作为客户端和服务器之间的协议,但我知道HTTPS不能防止参数篡改。

如我们所知,我们可以在URL、HTTP头或HTTP正文中设置参数。这样客户就可以直接看到这些参数。

在我看来,有两个问题(我不是安全专家,所以我不知道这两个问题是否存在):

  1. 用户可以篡改参数。例如,您无权访问其他客户端的资源,但如果您篡改了某些参数,则可能会非法访问某些资源。
  2. 用户可以直接看到参数,例如用户的ID。在我的项目中,我们将用户ID放入所有HTTP请求的头中,以跟踪请求。嗯,我只是觉得这不是个好主意,因为用户可以直接看到他的ID。我在想如果我需要加密它..。

就像我之前说的,我不是安全专家,所以你能给我一些解决问题的办法吗?我刚刚了解了JWT,JWT可以防止参数被篡改,但是客户仍然可以直接看到JWT的参数,而且我认为不能将所有的参数都放入JWT中。

EN

回答 2

Security用户

发布于 2023-04-12 07:38:46

这里没有什么特别的HTTP,但是对于任何类型的数据交换都是一样的:

  • 在处理来自用户的不可信数据时,必须始终根据所期望的数据来验证数据。永远不要假设一个人可以信任客户。
  • 为了保护客户端向服务器反映的服务器生成的数据(或第三方生成的数据)的完整性(比如Cookies,JWT令牌.)需要在消息中添加完整性保护,并在服务器中验证没有人篡改该消息。例如,这可以使用HMAC来完成。
  • 为了防止客户端从只应该反映到服务器的数据中提取信息(比如Cookies、JWT令牌、.)需要对数据进行加密,以便只有服务器才能解密。
票数 1
EN

Security用户

发布于 2023-04-12 09:34:15

用户可以篡改参数。

这取决于你所说的“参数”是什么意思。如果您指的是用户发送到服务器的任何数据,那么这不是真的。例如,用户可以绕过您在JavaScript中实现的任何验证。这就是为什么服务器不应该信任从客户端接收到的任何数据,并且应该验证所有数据。

但是JWT和类似的元素不能被篡改。

例如,您无权访问其他客户端的资源,但如果您篡改了某些参数,则可能会非法访问某些资源。

不是的。如果您正确地实现了安全方面,这是不可能的。JWT签署了。如果一个用户试图破解签名,并为此目的使用世界上所有的计算机,那么即使在几百万年后,所有这些计算机也无法破解该签名。

因此,用户A无法伪造JWT并假装为用户B。

导入是:只有在正确验证JWT (结构、过期、声明)、正确检查用户权限的情况下,才有效。

重要的是:只有在正确处理其他方面时才能工作,例如,如果您保护XSS,如果您使用TLS,如果您正确地使用HttpOnly和SameSite cookie属性。如果您不关心这一点,那么在最坏的情况下,XSS攻击可能会成功,JWT令牌可能被窃取(如果不使用HttpOnly )。

您可以从OWASP推荐的内容开始。

用户可以直接看到参数,例如用户的ID .我只是觉得这不是个好主意。

如果您正确执行所有相关的验证,那么就没有问题了。唯一的安全方面是,如果您在所有用户中增量地生成in,则可以洞察数据库中有多少此类对象,例如您有多少产品、多少订单、多少用户。如果为每个用户独立地生成ID,例如,如果每个用户都有订单1,每个用户都有订单2等,则可以减轻其中一些问题,而订单密钥由该用户的用户ID和订单ID组成。

对于所有可能的案件,都没有通用的答案。在每一种情况下,检查可能导致的后果,并决定是否要公开ID之类的特定属性。

JWT可以防止参数篡改

不是的。JWT仅意味着发送此特定JWT的方被允许对与特定用户(其名称包含在此JWT中)相关的数据执行特定操作(包含在此JWT中)。正如我前面所说,JWT不能被篡改。一个用户不能使用另一个用户的名称或自己的名称创建一个JWT,但是使用其他声明/角色,因为只有由身份提供者签名的JWT才是可信的。用户不能以标识提供程序的名称创建签名,因为它需要身份提供程序保密的私钥。

但是客户仍然可以直接看到JWT的参数。

JWT不包含任何秘密数据。用户名对用户来说不是秘密。用户声明/角色对于用户来说不是秘密的,因为用户在注册到系统时申请了这些角色,并且用户被告知授予的任何角色。令牌中的过期日期也不是秘密。

我不认为我能把所有的参数都放入JWT中

JWT不是任意数据的容器。它只应包含与授权相关的数据:授予什么用户访问的权限。

任何其他属性都不应该放在JWT中。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/269665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档