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;
}
}
}
仅供参考,大神们不要见笑。
添加回复
请先登陆