打造自己的jsp防御代码
一、需要准备JDK环境
编译.java文件成.class文件
https://www.oracle.com/technetwork/java/javase/downloads/index.html
需要javac编译
javac -target 1.4 -source 1.4 -classpath servlet-api.jar urlfilter.java
二、实际设置
设置一个全局的过滤器,通过web.xml添加filter过滤器
名称:Url中注入过滤器
功能:可以过滤,导向到错误页,防止代码泄漏
需要的设置:Web.Xml文件中需要进行如下设置
<filter>
<filter-name>urlfilter</filter-name>
<filter-class>Safe3conn.urlfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
编译后的class文件要放在WEB-INF\classes\Safe3conn文件夹下,改变Web.xml文件后需要重启Tomcat服务器
package Safe3conn;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.lang.String.*;
import java.lang.*;
public class urlfilter extends HttpServlet implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
String url1=(String)((HttpServletRequest)request).getQueryString(); //GET提交过滤(注:可自行添加POST和Cookie过滤)
if(url1==null||!sql_inj(url1))
{
chain.doFilter(request,response);
}
else{
res.sendRedirect(req.getContextPath()+"/err.jsp"); //设置转向的错误页面
}
}
//过滤函数
public static boolean sql_inj(String str)
{
String inj_str ="' and exec insert select delete update count * % chr mid master truncate char declare ; or - + ,";
String inj_stra[] = inj_str.split(" ");
for (int i=0 ; i < inj_stra.length ; i++ )
{
if (str.indexOf(inj_stra[i])>=0)
{
return true;
}
}
return false;
}
//过滤结束
public void init(FilterConfig config)
throws ServletException {}
public void destroy() {}
}
编译:javac urlfilter.java 出现错误
主要是缺少:servlet-api.jar
成功编译:
javac -target 1.4 -source 1.4 -classpath servlet-api.jar urlfilter.java
还需要一个web.xm文件(一般web页面会有这个,只需要添加filter对应的地方)
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<filter>
<filter-name>sqlfilter</filter-name>
<filter-class>Safe3conn.urlfilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sqlfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
最后需要把class文件放到WEB-INFO
就是在class的添加Safe3conn/urlfilter.class
web.xml的相关的关联urlfilter的这个类
重新启动
主要是过滤这些字段:
String inj_str ="’ and exec insert select delete update count * % chr mid master truncate char declare ; or - + ,";
提交有含有上面过滤的参数就跳转err.jsp
这个是sql的防御,XSS的防御相似。
三、总结
主要是java的编译,还有fileter的web.xml的添加。
过滤全局的函数编写。
公众号:
thelostworld:
个人知乎:https://www.zhihu.com/people/fu-wei-43-69/columns
个人简书:https://www.jianshu.com/u/bf0e38a8d400