首页 > 编程语言 >JAVA安全-JWT安全&预编译CASE注入

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

时间:2023-08-03 22:23:17浏览次数:52  
标签:CASE 语句 PreparedStatement JAVA JWT --- session SQL

通过前期的 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查看框架信息 

 

标签:CASE,语句,PreparedStatement,JAVA,JWT,---,session,SQL
From: https://www.cnblogs.com/Zx770/p/17604616.html

相关文章

  • JavaSE--jdk的安装以及环境变量相关
    一、jdk的安装在oracle官网安装javase即可,有exe和zip两种jdk的bin目录下有javac.exe负责编译,java.exe负责运行二、有关环境变量的配置1、配置环境变量path的步骤桌面计算机右击》属性》高级系统设置》环境变量path环境变量当中都是路径,路径与路径之间必须用英文半角分开2......
  • JavaSE--JDK、JRE、JVM三者之间的关系
    JDK:Java开发工具箱JRE:Java运行环境JVM:java虚拟机JDK包括JRE,JRE包括JVM。jvm是不能独立安装的,但是jre和jdk是可以单独安装的安装jdk后jre自动就安装了安装jre后jvm就自动安装了 问题:在客户进行项目部署时,把项目跑起来,需要安装jdk么?只需要安装jre就行,jre体积小,安装便捷 Java体......
  • Java面试题 P49:框架篇:MyBatis是否支持延迟加载?
         未配置延迟加载的执行结果: =========================================启用MyBatis延迟加载:     同样可以达到刚才的效果。   ......
  • mysql插入报错java.sql.SQLException: Incorrect string value: '\xF0\x9F\x87\xA
    背景环境java8,centos7.9,mysql8.0.34新装的环境,默认给装了mysql8,想着与时俱进用下新版,结果插入就报错java.sql.SQLException:Incorrectstringvalue:'\xF0\x9F\x87\xA8\xF0\x9F...'forcolumn解决方法这个错误通常是由于MySQL数据库中的字符集不支持存储特定的字符或表情符......
  • JavaScript之变量
    一:变量的概述简单来说,变量就是一个装东西的盒子。二:变量在内存中的存储本质:变量是程序在内存中申请的一块用来存放数据的空间。类似我们酒店的房间,一个房间就可以看做是一个变量。三:变量的使用变量在使用时分为两步:1.声明变量2.赋值1.声明//声明变量varage;//声明一个名称为a......
  • 【Java基础】Java 入门第一步
    ......
  • Java面试题 P48:框架篇:MyBatis执行流程
         ......
  • 正则表达式在JavaScript的使用
    正则表达式引入:邮件格式的匹配介绍检查字符串是否符合某些规则使用规则基本语法:构造函数方式:let变量=newRegExp("正则表达式","匹配模式")(更灵活)字面量方式:let变量=/正则表达式/匹配模式(更方便)匹配模式(可以有多个,且顺序无所谓):i忽略大小写g全......
  • Java面试题 P48:框架篇:Spring框架常见注解(Spring、SpringBoot、SpringMvc)
        ......
  • 【JAVA】Java 内存模型中的 happen-before
    前言Java语言在设计之初就引入了线程的概念,以充分利用现代处理器的计算能力,这既带来了强大、灵活的多线程机制,也带来了线程安全等令人混淆的问题,而Java内存模型(JavaMemoryModel,JMM)为我们提供了一个在纷乱之中达成一致的指导准则。本篇博文的重点是,Java内存模型中的happen-be......