我正在开发一个HTTP服务器。我使用HTTPS作为客户端和服务器之间的协议,但我知道HTTPS不能防止参数篡改。
如我们所知,我们可以在URL、HTTP头或HTTP正文中设置参数。这样客户就可以直接看到这些参数。
在我看来,有两个问题(我不是安全专家,所以我不知道这两个问题是否存在):
就像我之前说的,我不是安全专家,所以你能给我一些解决问题的办法吗?我刚刚了解了JWT,JWT可以防止参数被篡改,但是客户仍然可以直接看到JWT的参数,而且我认为不能将所有的参数都放入JWT中。
发布于 2023-04-12 07:38:46
这里没有什么特别的HTTP,但是对于任何类型的数据交换都是一样的:
发布于 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中。
https://security.stackexchange.com/questions/269665
复制相似问题