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 |
在探索一下不出网的命令执行回显方式是的总结与思考
开始搞起来(没写完