NutzCN Logo
问答 nutz dao 的防注入 怎么弄
发布于 3153天前 作者 CXW0504 2201 次浏览 复制 上一个帖子 下一个帖子
标签: dao

nutz dao 的防注入 怎么弄

3 回复

最直接的方法就是自己写个过滤器加在你的主模块上@Filters(@By(type = AntiInjectFilter.class))
没发现nutz自带这功能.其实,反注入这种事情,在Cnd拼成sql的时候,应该已经机巧的用一些方法做了简单的反注入.但是如果你的查询语句本身就不安全,nutz再安全也是没有用的.比如你直接执行sql,那谁防的住.简单的就是写个过滤,不准sql关键字执行.(但是对于sqlserver这种垃圾货,也是没用.貌似这货天生就是为注入而生的.个人戏言,切勿当真,所以在此一边使用win10系统一边鄙视微软)
附上随手写的一个过滤器代码:

package com.nuatar.pi.filter;


import com.nuatar.pi.Utils.AntiInject;
import org.nutz.mvc.ActionContext;
import org.nutz.mvc.ActionFilter;
import org.nutz.mvc.View;
import org.nutz.mvc.view.HttpStatusView;
import org.nutz.mvc.view.ServerRedirectView;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Enumeration;

/**
 * Created by lixinghua on 15/6/3.
 */
public class AntiInjectFilter implements ActionFilter {
    @Override
    public View match(ActionContext context) {
        HttpServletRequest request = context.getRequest();
        Enumeration<String> names = request.getParameterNames();
        boolean isInject = false;
        while (names.hasMoreElements()) {
            if (AntiInject.IsInject(request.getParameter(names.nextElement()))) {
                isInject = true;
                break;
            }
        }
        String path = request.getRequestURI() + "?" + request.getQueryString();
        try {
            path = URLDecoder.decode(path, "utf-8");
        } catch (UnsupportedEncodingException e) {
            return new ServerRedirectView("/Errors/error.html");
        }
        if (!isInject) {
            isInject = AntiInject.IsInject(path);
        }
        if (isInject) {
            return new HttpStatusView(403);
        } else {
            return null;
        }
    }
}

仅供参考,大神们不要见笑。

楼上是针对,直接将传入的参数当sql语句用的吧!这种本来就不提倡使用

添加回复
请先登陆
回到顶部