保护url时效性和安全性的一种解决方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保护url时效性和安全性的一种解决方案相关的知识,希望对你有一定的参考价值。

几乎都是同事小哥哥帮我铺路,给我参考链接,实现的理论方法以及知识,我只剩下看资料,敲代码,出错了也是他帮我看着一步步解释搞定过来的。嗯,大好人一枚。

 

ok,思路:

是生成一个随机数放在url里面,当做参数传递,在业务请求controller那里检验这个nonce是否与缓存里的一致,并且添加一个时间戳的属性,这样可以设置一段时间内url有效,过段时间点击就出现链接失效的情况。

开始咯:

1:使用了SecureRandom生成随机数nonce

import java.security.SecureRandom;


        String nonce = null;
        SecureRandom random = null;
        try {
            random = SecureRandom.getInstance("SHA1PRNG");
            System.out.println("SecureRandom random init:" + random);
        } catch (NoSuchAlgorithmException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        byte[] values = new byte[20];
        random.nextBytes(values);
        nonce = String.valueOf(random.nextLong());

2 :  自定义一个class ,来构建一个对象,对象里面存放时间戳,nonce,openid.生成之后,把它放到一个cache里面,这个Guava Cache 存放。

假如只是简单的把Guava Cache当作HashMap或ConcurrentHashMap的替代品,不需要用到load方法,而是手动地插入,可以这样: 

Java代码

public static final Cache<String, Object> cache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build();

注意不能用LoadingCache了。
查找:
cache.getIfPresent("xx");
插入:
cache.put("xx", "xxx");

 

3 : 获取缓存里面的数据去对比检验就好了

private Boolean checkTimeOut(String openid,String nonce){
        Boolean flag = false;
        if(!nonce.isEmpty()){
            StructureOfNonce v = (StructureOfNonce) MenuClickEventHandler.cache.getIfPresent(nonce);
            String cnonce = v.getNonce();
            String copenid = v.getOpenid();
            long createTimestamp = v.getTimestamp();
            if(openid.equalsIgnoreCase(copenid) && nonce.equalsIgnoreCase(cnonce)){
                Long currentTime = System.currentTimeMillis();
                int time =(int) (currentTime - createTimestamp)/1000/60 ;
                if(0 <= time && time <= 1){
                    flag = true;
                }
            }
        }
        return flag;
    }

Cheers !

好的,全是别人的经验,下面放巨人的果实吧!

详细解析cacheGuava Cache :

http://bylijinnan.iteye.com/blog/2225074  

单例模式实现的范例,提供解题思路:

以上是关于保护url时效性和安全性的一种解决方案的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript跨域解决方法大全

信息安全等级保护

您访问的页面url的加密key有异常

国外的dropbox邮件链接为什么一开始会

Server-直播码安全保护(安全防盗链)

解决这些问题,轻松搞定等保