小迪安全学习笔记--第40和41天JAVA安全及预编译CASE注入等目录遍历访问控制XSS等安全问题

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

小迪安全学习笔记--第40和41天JAVA安全及预编译CASE注入等目录遍历访问控制XSS等安全问题_第1张图片

SQL Injection(mitigation)

防御sql注入,其实就是session,参数绑定,存储过程这样的注入。

//利用session防御,session内容正常情况下是用户无法修改的

select *from users where user = “’” + session.getAttribute (“UserID”")+ “’” ;

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

string query = "SELECT * FROM users WHERE last_name = ? ";
Preparedstatement statement = connection.preparestatement ( query) ;
statement .setstring ( 1, accountName ) ;
Resultset results = statement.executeQuery ( );

上面说的方式也不是能够绝对的进行sql注入防御,只是减轻。

如参数绑定方式可以使用下面方式绕过。

通过使用case when语句可以将order by后的orderExpression表达式中添加select语句。

https://www.cnblogs.com/klyjb/p/11473857.html

小迪安全学习笔记--第40和41天JAVA安全及预编译CASE注入等目录遍历访问控制XSS等安全问题_第2张图片
小迪安全学习笔记--第40和41天JAVA安全及预编译CASE注入等目录遍历访问控制XSS等安全问题_第3张图片

什么是JWT?
JSON web Token (JSON web令牌是一种跨域验证身份的方案。JWT不加密传输的数据,但能够通过数字签名来验证数据未被篡改〈但是做完下面的webGoat练习后我对这—点表示怀疑)。
JwT分为三部分,头部(Header),声明(claims),签名(signature),三个部分以英文句号.隔开。JWT的内容以Base64URL进行了编码。
头部(Header)
{“alg”:“HS256”,

“typ” : ““JwP””}
alg
是说明这个JwT的签名使用的算法的参数,常见值用s256(默认),Hs512等,也可以为None。HS256表示HMAC SHA256。
typ
说明这个token的类型为JWT

JwT固定参数有:

iss:发行人

exp:到期时间

sub:主题

aud:用户

nbf:在此之前不可用

iat:发布时间

jti: JwT ID用于标识该JwT

签名(signatura)
服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用此密码进行加密,生成的字符串就是JwT的签名。lL
下面是一个用Hs256生成JwT的代码例子
HMACSHA256(base64UrlEncode (header) + “.”+base64URlEncode(payload) ,secret)

1、用户端登录,用户名和密码在请求中被发往服务器
2、(确认登录信息正确后)服务器生成json头部和声明,将登录信息写入JsoN的声明中(通常不应写入密码,因为JwT是不加密的),并用secret用指定算法进行加密,生成该用户的JwT。此时,服务器并没有保存登录状态信息。
3、服务器将JwT (通过响应)返回给客户端
4、用户下次会话时,客户端会自动将JwT写在HTTF请求头部的Authorization字段中
5、服务器对JwT进行验证,若验证成功,则确认此用户的登录状态

41天是代码审计,就不写了,建议自己看视频

你可能感兴趣的:(web安全自学笔记,安全)