亲,365竞彩足球推荐怎么操作___

3958人阅读
spring(17)
shiro(14)
spring security3(16)
java(37)
java web(37)
&&&&&&& 前面的教程有一章是讲解如何突破上传的,当被人通过上传功能突破的防线那就杯具了,有点hack知识的人都知道,很多攻击都是优先寻找上传的功能,因为能突破
就会剩下很多的功夫,比如hack上传了一个asp,php或者jsp文件,然后通过抓包路径获取了文件存放地址,然后直接请求就能通过这个可执行的文件获取到数据库的信息,
或者是遍历目录下载文件,寻找文件中的其他漏洞以获得更高的权限,下面我就演示下简单的防范手段,就算被突破了上传也会有下一堵墙在一定程度上防止执行脚本
我主要是使用shiro写了一个filter过滤需要请求信息,如遇到黑名单则记录信息,看下面贴的代码
package com.silvery.security.shiro.
import java.text.SimpleDateF
import java.util.D
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.http.HttpServletR
import org.apache.shiro.web.filter.authz.AuthorizationF
import org.slf4j.L
import org.slf4j.LoggerF
import com.silvery.utils.PatternU
import com.silvery.utils.WebU
* 黑名单可执行程序请求过滤器
* @author shadow
public class SimpleExecutiveFilter extends AuthorizationFilter {
protected static final String[] blackUrlPathPattern = new String[] { &*.aspx*&, &*.asp*&, &*.php*&, &*.exe*&,
&*.jsp*&, &*.pl*&, &*.py*&, &*.groovy*&, &*.sh*&, &*.rb*&, &*.dll*&, &*.bat*&, &*.bin*&, &*.dat*&,
&*.bas*&, &*.c*&, &*.cmd*&, &*.com*&, &*.cpp*&, &*.jar*&, &*.class*&, &*.lnk*& };
private static final Logger log = LoggerFactory.getLogger(SimpleExecutiveFilter.class);
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object obj) throws Exception {
HttpServletRequest httpRequest = (HttpServletRequest)
String reqUrl = httpRequest.getRequestURI().toLowerCase().trim();
for (String pattern : blackUrlPathPattern) {
if (PatternUtils.simpleMatch(pattern, reqUrl)) {
log.error(new StringBuffer().append(&unsafe request &&& &).append(& request time: &).append(
new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&).format(new Date())).append(&; request ip: &)
.append(WebUtils.getClientIP()).append(&; request url: &).append(httpRequest.getRequestURI())
.toString());
下一步把刚刚写的过滤器配置到shiro的过滤链中
&!-- 过滤链配置 --&
&bean id=&shiroFilter& class=&org.apache.shiro.spring.web.ShiroFilterFactoryBean&&
&property name=&securityManager& ref=&securityManager& /&
&property name=&loginUrl& value=&/& /&
&property name=&successUrl& value=&/cms/index.do& /&
&property name=&unauthorizedUrl& value=&/static/unauthorized.html& /&
&property name=&filters&&
&entry key=&role&&
class=&com.silvery.security.shiro.filter.SimpleRoleAuthorizationFilter& /&
&entry key=&authc&&
class=&com.silvery.security.shiro.filter.SimpleFormAuthenticationFilter& /&
&entry key=&exec&&
&bean class=&com.silvery.security.shiro.filter.SimpleExecutiveFilter& /&
&/property&
最后配置下我们需要过滤的请求目录,一般都是全量过滤,但是有些静态资源是不应该过滤的,所以应该注意顺序,让anon权限的放到放到exec的前面
&!-- 权限资源配置 --&
&bean id=&filterChainDefinitionsService&
class=&com.silvery.security.shiro.service.impl.SimpleFilterChainDefinitionsService&&
&property name=&definitions&&
/static/** = anon
/** = exec
&/property&
最后请求下php,jsp等那些文件是返回到无权限的页面,我们的简单防范已经达到目的了,下一章节可能讲如何防范xss和csrf攻击的防范
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:474114次
积分:4049
积分:4049
排名:第7011名
原创:44篇
评论:313条
(3)(2)(1)(2)(2)(4)(7)(1)(3)(1)(2)(3)(5)(1)(7)查看: 5830|回复: 7
注册时间最后登录阅读权限200积分222精华0帖子
初来乍到, 积分 222, 距离下一级还需 78 积分
在sae上用shiro框架碰到会话不能保持的问题,发现也有同学碰到相同的问题,原因通过分析http请求发现每次cookie里的sessionid都会变化,检查源代码确定原因shiro在sae里获取会话id时每次都是空的,导致每次都会去重新生成一个sessionid。
解决方法:
自己实现shiro的cachemanager,shiro自己的session保存到memcache(当然也可以保存到kvdb和mysql),问题解决。
实现参考(代码实现仅供参考,获取memcache client的方式需要自己重写):
shiro的部分spring配置:
&!-- 用户授权/认证信息Cache, 采用MemCache --&
& & &bean id=&shiroMemoryManager& class=&org.apache.shiro.cache.MemoryConstrainedCacheManager&&
& & &/bean&
&bean id=&securityManager& class=&org.apache.shiro.web.mgt.DefaultWebSecurityManager&&
& && &&&&property name=&realm& ref=&shiroDbRealm& /&
& && &&&&property name=&cacheManager& ref=&shiroMemoryManager& /&
& && &&&&property name=&sessionManager& ref=&sessionManager& /&
& & &/bean&
1.缓存实现:
package cn.mons.cache.
import java.util.C
import java.util.C
import java.util.S
import org.apache.shiro.cache.C
import org.apache.shiro.cache.CacheE
import cn.mons.utils.MemcacheU
import com.sina.sae.memcached.SaeM
* Shiro的Memcache 缓存实现
* @author xudong.jiang
public class Memcache&K, V& implements Cache&K, V& {
& & private SaeMemcache saeM
& & private S
& & Memcache(SaeMemcache saeMemcache, String name) {
& && &&&this.saeMemcache = saeM
& && &&&this.name =
& & public V get(K k) throws CacheException {
& && &&&return (V) saeMemcache.get(name + k);
& & public V put(K k, V v) throws CacheException {
& && &&&V oldValue = get(k);
& && &&&saeMemcache.set(name + k, v);
& && &&&return oldV
& & public V remove(K k) throws CacheException {
& && &&&V oldValue = get(k);
& && &&&saeMemcache.delete(name + k);
& && &&&return oldV
& & public void clear() throws CacheException {
& && &&&//
& & public int size() {
& && &&&return 0;
& & public Set&K& keys() {
& && &&&return Collections.emptySet();
& & public Collection&V& values() {
& && &&&return Collections.EMPTY_LIST;
2:缓存管理器实现:
package cn.mons.cache.
import org.apache.shiro.cache.C
import org.apache.shiro.cache.CacheE
import org.apache.shiro.cache.CacheM
import com.sina.sae.memcached.SaeM
import cn.mons.utils.MemcacheU
* Shiro的Memcache 缓存实现
* @author xudong.jiang
public class MemcacheManager implements CacheManager {
& & public &K, V& Cache&K, V& getCache(String name) throws CacheException {
& && &&&SaeMemcache client = MemcacheUtil.getClient();
& && &&&return new Memcache&K, V&(client, name);
注册时间最后登录阅读权限200积分47精华0帖子
初来乍到, 积分 47, 距离下一级还需 253 积分
很有意义,学习啦!~~
注册时间最后登录阅读权限200积分185精华0帖子
初来乍到, 积分 185, 距离下一级还需 115 积分
name+k,哈哈~
不过你这个v貌似没有序列化吧?
注册时间最后登录阅读权限200积分185精华0帖子
初来乍到, 积分 185, 距离下一级还需 115 积分
MemcacheUtil.getClient();方法主要是:声明一个static的SaeMemcache变量然后构造方法中new一下然后调用init()方法,对吧?
注册时间最后登录阅读权限200积分185精华0帖子
初来乍到, 积分 185, 距离下一级还需 115 积分
配置文件是不是给错了?
注册时间最后登录阅读权限200积分185精华0帖子
初来乍到, 积分 185, 距离下一级还需 115 积分
依然无法取到session,崩溃了
注册时间最后登录阅读权限200积分29精华0帖子
初来乍到, 积分 29, 距离下一级还需 271 积分
我的也不行,给不能给源码看看
注册时间最后登录阅读权限200积分229精华1帖子
初来乍到, 积分 229, 距离下一级还需 71 积分
你的web.xml 没有配置& & & & &distributable /&。。配置完了就ok了
Powered by1.&问题提出的根源:
处理404&notfound错误。
2.&一般做法:
在web.xml里配置error-page.
&error-page&
&error-code&404&/error-code&
&location&/WEB-INF/views/error/404.jsp&/location&
&/error-page&
3.&特殊场景
项目当中使用shiro安全框架,配置了非ServletContainer的session管理器。
如果自定义了sessionManager,即session不由web容器来管理,而是我们自己处理,比如讲session放到couchbase上面或者其他分布式缓存上面,
&bean&id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"&
此时,如果想同时使用&&error-page&来处理404错误,就会造成session的重新建立,表现为已登录用户,访问一个不存在的url,得到一个返回404页面,然后再访问正确的url地址又需要重新登录。
4.&原因分析
shiro的DefaultWebSessionManager把session自己管理起来了,不放到web容器里,那么当发生404时,web容器在处理过程里发现容器里没有session,那么就会建立一个新的sessionid,然后把sessionid绑定到请求上。于是shiro框架就认为是一个新的session来了,但是没有登录,所以自动跳转到login页面。
5.&失败的解决方案
不用web容器的error-page处理。改用spring&mvc框架自身处理。配置异常处理器:
&bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"&
&property&name="exceptionMappings"&
&prop&key="org.apache.shiro.authz.UnauthorizedException"&error/403&/prop&
&prop&key="NoSuchRequestHandlingMethodException"&error/404&/prop&
&prop&key="java.lang.Throwable"&error/500&/prop&
&/property&
如上面标黄色的设置项,实际是不起作用的。因为正常的404找不到地址错误是不会抛出任何异常的。
6.&成功的方案
不用web容器的error-page处理。在spring&mvc里配置一个能匹配所有请求的处理器,但是要保证这个默认的处理器排在url映射匹配排序的最后。
在spring-mvc.xml里添加如下的bean
&bean&id="defaultController"&class="com.ikang.base.web.DefaultController"&/&
&bean&id="defaultUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"&
&property&name="order"&value=""&/&&!--&此处的order很重要,要低于&mvc:resources的默认值--&
&property&name="mappings"&
&prop&key="/*/**"&defaultController&/prop&
&/property&
DefaultController.java类
public&class&DefaultController&implements&Controller&{
public&ModelAndView&handleRequest(HttpServletRequest&request,&HttpServletResponse&response)
throws&Exception&{
return&new&ModelAndView("error/404");
注意:此controller一定不要用annotation方式,必须如上实现Controller接口。因为如果用@Controller/@RequestMapping注解方式的话,就不能保证顺序排在匹配映射顺序的最后了。
阅读(...) 评论()

我要回帖

更多关于 竞彩足球推荐 的文章

 

随机推荐