通过前期的 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