JAVA安全-JWT安全&预编译CASE注入

发布时间 2023-08-03 22:22:46作者: 执小汐

通过前期的 WEB 漏洞的学习,掌握了大部分的安全漏洞的原理及利用,但在各种脚本语言开发环境的差异下,会存在新的安全问题,其中脚本语言类型 PHP,Java,Python 等主流开发框架会有所差异。

Javaweb-SQL 注入攻击-预编译机制绕过

1.  SQL注入的防御

---防御 sql 注入:1.session2.参数绑定存储过程

#利用 session 防御

---session 内容正常情况下是用户无法修改的

---select * from users where user = "'" +session.getAttribute("UserID") + "'";(session在服务器内)

#参数绑定方式,利用了 sql 的预编译技术

---常用Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。

---Statement 该对象用于执行静态的 SQL 语句,并且返回执行结果。 此处的SQL语句必须是完整的,有明确的数据指示。查的是哪条记录?改的是哪条记录?都要指示清楚。

---PreparedStatement ,SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。(这里是PreparedStatement不允许一个占位符(?)有多个值,注入的语句也就不会被执行)

参考资料:https://www.cnblogs.com/klyjb/p/11473857.html

2.JWT

#什么是JWT

---JSON Web Token(JSON Web 令牌)是一种跨域验证身份的方案。JWT 不加密传输的数据,但能够通过数字签名来验证数据未被篡改(但是做完下面的 WebGoat 练习后我对这一点表示怀疑)。

---JWT 分为三部分,头部(Header),声明(Claims),签名(Signature),三个部分以英文句号.隔开。

---JWT 的内容以 Base64URL 进行了编码。

#头部(Header):

{

"alg":"HS256",

"typ":"JWT"

}

---alg是说明这个JWT 的签名使用的算法的参数,常见值用HS256(默认),HS512 等,也可以为None。HS256表示 HMAC SHA256。

---typ说明这个 token 的类型为 JWT

#声明(Claims):

{

"exp": 1416471934,//到期时间

"user_name": "user",

"scope": ["read","write"],

"authorities": ["ROLE_ADMIN","ROLE_USER"],

"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84",//JWT标识

"client_id": "my-client-with-secret"

}

#JWT 固定参数有:

---iss:发行人

---exp:到期时间

---sub:主题

---aud:用户

---nbf:在此之前不可用

---iat:发布时间

---jti:JWT ID 用于标识该 JWT

 

#签名(Signature)

---服务器有一个不会发送给客户端的密码(secret),用头部(header)中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是 JWT 的签名。

JWT在线解码网站:https://jwt.io/

这里没有下载靶场,所以记一下中重要笔记

如果没有密钥,就将头部(header)部分alg改为none,在进行base64编码,但-注意:在HTTP传输中,base64编码中的=,+,/等等特殊符号通过URL解码容易产生歧义,因此产生了与URL兼容的base64 URL编码

如果有密钥,就直接修改需要修改的信息

nodejs框架

---nodejs简介(猜测是一个前端框架)

---通过/controllers/api.js查看框架信息