JAVA安全-JWT安全及预编译CASE注入等

本文探讨了在JAVA中防止SQL注入的两种方法:利用session防御和参数绑定的PreparedStatement。尽管这些方法能降低风险,但并非绝对安全,如通过casewhen语句可能绕过参数绑定的防御。此外,文章还介绍了JWT的安全特性,包括其组成和验证过程,并展示了如何通过篡改JWT实现无密钥登录的靶场案例。强调了JWT签名验证的重要性以及在实际应用中的安全考量。
摘要由CSDN通过智能技术生成

在这里插入图片描述在这里插入图片描述

JAVA中防止sql注入

//利用session防御,session内容正常情况下是用户无法修改的:
select * from users where user = "'" + session.getAttribute("UserID") + "'";

//参数绑定方式,利用了sql的预编译技术(PreparedStatement)
预编译讲解:https://www.cnblogs.com/klyjb/p/11473857.html

上面说的方式也不是能够绝对的进行SQL注入防御,只是减轻。
比如参数绑定的方式可以使用下面的方式绕过:
通过使用case when语句可以将order by后的orderExpression表达式中添加select语句。

JWT安全

组成
在这里插入图片描述JWT 分为三部分,头部(Header),声明(Claims),签名(Signature),三个部分以英文句号.隔开。 JWT 的头部,声明内容以 Base64进行了编码。
签名处通过头部和声明的内容以及特殊的密钥进行加密生成。

头部(Header)
{
"alg":"HS256",
"typ":"JWT"
}

声明(Claims)
{
"exp": 1416471934,
"user_name": "user",
"scope": [
"read",
"write"
],
"authorities": [
"ROLE_ADMIN",
"ROLE_USER"
],
"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84",
"client_id": "my-client-with-secret"
}

声明(Claims)
{
"exp": 1416471934,
"user_name": "user",
"scope": [
"read",
"write"
],
"authorities": [
"ROLE_ADMIN",
"ROLE_USER"
],
"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84",
"client_id": "my-client-with-secret"
}

靶场例子

无密钥-修改alg,删除签名
登陆用户时抓包,access_tocken为空
在这里插入图片描述进行其它退出等操作后抓包,可以通过格式确定是JWT
在这里插入图片描述在线jwt解码:https://jwt.io/
通过在线解密查看解密结果。此处alg:HS512的意思是,此签名(Signature)是通过头部(Header),声明(Claims),以及特殊的密钥进行HS512加密。
因为此处获取不了密钥,所以不能对签名进行解密。

在这里插入图片描述当对方服务器上的验证不需要签名时,把对应的jwt进行修改后再base64加密
将alg修改为none进行base64编码
在这里插入图片描述
将admin的值修改为true
在这里插入图片描述将两个base64编码后的字符串去掉等号用.拼接为jwt的格式,进行提交(因为这里alg的值为none,所以就没有进行加密,不会生成签名)
在这里插入图片描述
点击提交,登陆成功
在这里插入图片描述
如果对方服务器上要验证签名,则此方法是无效的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值