由于各语言之间存在差异,导致会出现各种安全问题。
防御SQL注入,其实就是session,参数绑定、存储过程这样的注入。
利用Session防御,session内容正常情况下是用户无法修改的
select * from users where user = "'" + session.getAttrbute("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
语句。
JDBC编程之预编译SQL与防注入
是说明这个JWT的签名使用的算法的参数,常见值是用HS256(默认),SH512等,也可以为None。HS256表示HMAC SHA256。
https://jwt.io
通过编码与解码修改JWT原来的值并重新添加之后,因为内容被修改,需要重新生成签名,这时候,可以尝试将加密算法改为None,经过编码之后与修改后的数据进行拼接,然后使用篡改后的JWT进行请求。
在HTTP传输过程中,Base64编码中的"=",", "+", "/"等特殊符号通过URL解码通常容易产生歧义,因此产生了与URL兼容的Base64 URL编码。
将编码后的==删除掉。
注意在修改后Token后,在请求数据包中,将Token信息填入到Authorization中。
需要有足够强大的爆破字典,可以进行尝试。