run哥带你手写KNN
一个老师布置的任务 玩玩
一个老师布置的任务 玩玩
最近在学数字信号处理 老是用到卷积 今天读到一篇文章 很好的解释了卷积的意义 让我有种豁然开朗的感觉
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。

Apache Shiro 是一个 Java 安全框架,包括如下功能和特性:
Subject,在用户任意代码位置都可以轻易取到这个Subject。Shiro 支持数据源,称之为 Realms,可以利用其连接 LDAP\AD\JDBC 等安全数据源,并支持使用自定义的 Realms,并可以同时使用一个或多个 Realms 对一个用户进行认证,认证过程可以使用配置文件配置,无需修改代码。同时,Shiro 还支持 RememberMe,记住后下次访问就无需登录。Subject、支持多种 Realms。Shiro 支持 Wildcard Permissions ,也就是使用通配符来对权限验证进行建模,使权限配置简单易读。Shiro 支持基于 Roles 和基于 Permissions 两种方式的验证,可以根据需要进行使用。并且支持缓存产品的使用。HttpSession 类及相关全部 API。也可以在 SSO 中使用。Wildcard Permissions 来进行匹配。Shiro 支持实例级别的权限控制校验,例如domain:action:instance。CacheManager/Cache/CacheManagerAware ,Shiro 提供了默认的 MemoryConstrainedCacheManager 等实现。
现从下一份示例代码看看
https://github.com/apache/shiro

自带session功能

接着往下看看权限部分

分为粗粒度和细粒度
在三梦师傅的复现环境上改的
可以看到 对应上面架构图中的三个部分

配置
1 | map.put("/admin/list","authc,roles[admin]"); |
bypass
1 | /aaaaa/..;/admin/list |

绕过的原理就是访问 /aaaadawdadaws;/..;wdadwadadw/;awdwadwa/audit/list 这个请求的时候会被 shiro 和 spring 解析成不同的结果
看一下shiro的处理方式

跟进

这里是 直接截断; (59ascii 是 ;)
spring呢?

跟进 UrlPathHelper#removeSemicolonContent

su18师傅的原文:
可以看到,spring 处理了每个 / / 之间的分号,均把 “;” 及之后的内容截取掉了。所以当请求
/aaaadawdadaws;/..;wdadwadadw/;awdwadwa/audit/list进入到UrlPathHelper#decodeAndCleanUriString方法时,会逐渐被处理:
- removeSemicolonContent:”/aaaadawdadaws/..//audit/list”
- decodeRequestString:”/aaaadawdadaws/..//audit/list”
- getSanitizedPath:”/aaaadawdadaws/../audit/list”
这样再标准化就会成为正常的 “/audit/list”。
当以下这样配置时,会出现绕过
1 | map.put("/bypass/*/index", "authc"); |
绕过方法
1 | /bypass/id/index |
在探索一下不出网的命令执行回显方式是的总结与思考
开始搞起来(没写完