1.弱口令漏洞
解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种加密方式叠加组合。
2.未使用用户名及密码登录后台可直接输入后台URL登录系统。
解决方案:通过配置filter来过滤掉无效用户的连接请求。
3.JSP页面抛出的异常可能暴露程序信息。有经验的入侵者,可以从JSP程序的异常中获取很多信息,比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等。
解决方案:自定义一个Exception,将异常信息包装起来不要抛到页面上。
4.合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。
解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:
httpResponse.setHeader(“Cache-Control”,“no-cache”);
httpResponse.setHeader(“Cache-Control”,“no-store”);
httpResponse.setDateHeader(“Expires”, 0);
httpResponse.setHeader(“Pragma”,“no-cache”);
5.SQL注入漏洞。
解决方案:在数据库访问层中不要使用“+”来拼接SQL语句!如:
String sql= “SELECT * FROM USERS WHERE 1=1”;if(null != user.getUserName() && !””.equals(user.getUserName())){
sql += “ and UNAME = ‘”+user.getUserName()+”’”;}
而应使用PreparedStatement。如:
PreparedStatement pstmt = con.prepareStatement(“SELECT * FROM USERS WHERE UNAME=?”);
pstmt.setString(1, “Neeke”);
如果项目中使用了Hibernate框架,则推荐使用named parameter。如:
String queryString = “from Users where uname like :name”;
冒号后面是一个named parameter,我们可以使用Query接口将一个参数绑定到name参数上:
List result = session.createQuery(queryString)
.setString(“name”, user.getUserName())
.list();
6.文件上传漏洞。前台仅使用JS对文件后缀做了过滤,这只能针对普通的用户,而恶意攻击者完全可以修改表单去掉JS校验。
解决方案:前台JS过滤加服务器端程序过滤。具体过滤掉哪些文件类型视具体情况而定。
7.可执行脚本漏洞。对用户提交的数据未转义,一些用户提交的含有JavaScript脚本的信息被直接输出到页面中从而被浏览器执行。
解决方案:使用org.apache.commons.lang.StringEscapeUtils对用户提交的数据进行转义。如:
@RequestMapping(params=“method=addTopic”,method=RequestMethod.POST)public ModelAndView addTopic(HttpServletRequest request, HttpServletResponse response, BbsTopic topic){
BaseAdmin user = (BaseAdmin) request.getSession().getAttribute(Constant.SESSION_USER);
topic.setBaseAdmin(user);
topic.setTopicDate(new Timestamp(System.currentTimeMillis()));
topic.setTopicContent(StringEscapeUtils.escapeHtml(topic.getTopicContent()));
topic.setTopicTitle(StringEscapeUtils.escapeHtml(topic.getTopicTitle()));this.bbsTopicService.save(topic);return new ModelAndView(new RedirectView(“bbs.do?method=topicList&bfid=”+ topic.getBfid()));}
8.Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。
解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。
9、 日志,建议增加服务的访问日志,记录来访者的 IP ,传递参数,对后台操作用户建立日志,记录其操作内容。完善的日志记录可以帮助你发现潜在的危险,找到已经发生的问题。
——————————————————————————————————————————-
1 参数过滤
package com.founder.web.util.filter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class XssFilter implements Filter {
private String[] characterParams = null;
private boolean OK=true;
/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,ServletException {
HttpServletRequest servletrequest = (HttpServletRequest) request;
HttpServletResponse servletresponse = (HttpServletResponse) response;
servletrequest.setCharacterEncoding(“utf-8”);
boolean status = false;
Enumeration params = servletrequest.getParameterNames();
String param=””;
String paramValue = “”;
servletresponse.setContentType(“text/html”);
servletresponse.setCharacterEncoding(“utf-8”);
String str=””;
while (params.hasMoreElements()) {
param = (String) params.nextElement();
String[] values = request.getParameterValues(param);
paramValue = “”;
if(OK){//过滤字符串为0个时 不对字符过滤
for (int i = 0; i < values.length; i++){
paramValue=paramValue+values[i];//比这样写好 paramValue = values[i];
}
//去除特殊字符
// paramValue=trimIllegalCharacter(paramValue);
//转换成小写
paramValue=paramValue.toLowerCase();
//characterParams=new String[]{“expression”,”script”,”mouseover”,”mouseon”,”mouseout”,”click”,”dblclick”,”blur”,”focus”,”change”,”eval”};
System.out.print(“paramValue=”+paramValue);
characterParams=new String[]{“mouseo”,”click”,”blur”,”focus”,”change”,”eval”,”expression”,”alert(“};
for(int i=0;i<characterParams.length;i++){
if (paramValue.indexOf(characterParams[i]) >= 0) {
str=characterParams[i];
status = true;
break;
}
if(status)break;
}
String badStr =””;
if(param.equals(“newstype”)){
badStr= “‘|and|exec|<|>|&|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|”
+”char|declare|sitename|net user|xp_cmdshell|like’|and|exec|execute|insert|create|drop|” +
“table|from|grant|use|group_concat|column_name|” + “information_schema.columns|table_schema|union|where|select|delete|update|count|*|”
“chr|mid|master|truncate|char|declare|–|like|%|+|#”;
}else{
badStr= “‘|and|exec|<|>|&|execute|insert|select|delete|update|drop|*|%|chr|mid|master|truncate|” +
“char|declare|sitename|net user|xp_cmdshell|like’|and|exec|execute|insert|create|drop|” +
“table|from|grant|use|group_concat|column_name|” +
“information_schema.columns|table_schema|union|where|select|delete|update|count|*|” +
“chr|mid|master|truncate|char|declare|–|like|%|#”;
}
String[] badStrs = badStr.split(“\\|”);
for (int i = 0; i < badStrs.length; i++) {
if (paramValue.indexOf(badStrs[i]) >= 0) {
status = true;
str=badStrs[i];
break;
}
if(status)break;
}
}
}
//包含这三个的额页面不过滤 登录相关
boolean status_url = true;
StringBuffer url= servletrequest.getRequestURL();
String file[] = url.toString().split(“/”); if(file[file.length-1].contains(“login”)||file[file.length-1].contains(“setcookie”)||file[file.length-1].contains(“redirect”)||file[file.length-1].contains(“client”)){
status_url=false;
}
//购买流程相关不过滤
if(file[file.length-1].contains(“templateFlow”) ||
file[file.length-1].contains(“return.jsp”) ||
file[file.length-1].contains(“cashiergw”) ||
file[file.length-1].contains(“cashierReturnMiddlePage”) ){
status_url=false;
}
if (status&&status_url){
System.out.println(“请求路径==”+ servletrequest.getRequestURL());
PrintWriter out = servletresponse.getWriter();
String outstr=”<script language=’javascript’>alert(‘对不起!您输入内容含有非法字符:\\”+str+”‘);window.history.go(-1);</script>”;
out.print(outstr);
}else{
filterChain.doFilter(request, response);
}
}
@Override
public void destroy() {
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
2、cookies 安全设置
HttpOnly 主要是为了限制web页面程序的浏览器端script程序读取cookie
在web.xml 中配置
<session-config>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
<session-timeout>1200</session-timeout>
</session-config>
在tomcat 中的server.xml 中配置
<Context path=”” docBase=”” useHttpOnly=”true” />
3、http方法 访问方式设置
WebDAV (Web-based Distributed Authoring and Versioning)是基于 HTTP 1.1 的一个通信协议。它为 HTTP 1.1 添加了一些扩展(就是在 GET、POST、HEAD 等几个 HTTP 标准方法以外添加了一些新的方法)
,使得应用程序可以直接将文件写到 Web Server 上,并且在写文件时候可以对文件加锁,写完后对文件解锁,还可以支持对文件所做的版本控制。这个协议的出现极大地增加了 Web 作为一种创作媒体对于我们的价值。基于 WebDAV 可以实现一个功能强大的内容管理系统或者配置管理系统。
现在主流的WEB服务器一般都支持WebDAV,使用WebDAV的方便性,呵呵,就不用多说了吧,用过VS.NET开发ASP.NET应用的朋友就应该 知道,新建/修改WEB项目,其实就是通过WebDAV+FrontPage扩展做到的,下面我就较详细的介绍一下,WebDAV在tomcat中的配 置。
如何禁止DELETE、PUT、OPTIONS、TRACE、HEAD等协议访问应用程序应用程序呢? 解决方法
第一步:修改应用程序的web.xml文件的协议
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4″>
第二步:在应用程序的web.xml中添加如下的代码即可
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>HEAD</http-method>
<http-method>OPTIONS</http-method>
<http-method>MOVE</http-method>
<http-method>COPY</http-method>
<http-method>PROPFIND</http-method>
<http-method>SEARCH</http-method>
<http-method>MKCOL</http-method>
<http-method>LOCK</http-method>
<http-method>UNLOCK</http-method>
<http-method>PROPPATCH</http-method>
</web-resource-collection>
<auth-constraint> </auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
1.弱口令漏洞
解决方案:最好使用至少6位的数字、字母及特殊字符组合作为密码。数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密,或者多种加密方式叠加组合。
2.未使用用户名及密码登录后台可直接输入后台URL登录系统。
解决方案:通过配置filter来过滤掉无效用户的连接请求。
3.JSP页面抛出的异常可能暴露程序信息。有经验的入侵者,可以从JSP程序的异常中获取很多信息,比如程序的部分架构、程序的物理路径、SQL注入爆出来的信息等。
解决方案:自定义一个Exception,将异常信息包装起来不要抛到页面上。
4.合法用户“注销”后,在未关闭浏览器的情况下,点击浏览器“后退”按钮,可从本地页面缓存中读取数据,绕过了服务端filter过滤。
解决方案:配置filter对存放敏感信息的页面限制页面缓存。如:
httpResponse.setHeader(“Cache-Control”,“no-cache”);
httpResponse.setHeader(“Cache-Control”,“no-store”);
httpResponse.setDateHeader(“Expires”, 0);
httpResponse.setHeader(“Pragma”,“no-cache”);
5.SQL注入漏洞。
解决方案:在数据库访问层中不要使用“+”来拼接SQL语句!如:
String sql= “SELECT * FROM USERS WHERE 1=1”;if(null != user.getUserName() && !””.equals(user.getUserName())){
sql += “ and UNAME = ‘”+user.getUserName()+”’”;}
而应使用PreparedStatement。如:
PreparedStatement pstmt = con.prepareStatement(“SELECT * FROM USERS WHERE UNAME=?”);
pstmt.setString(1, “Neeke”);
如果项目中使用了Hibernate框架,则推荐使用named parameter。如:
String queryString = “from Users where uname like :name”;
冒号后面是一个named parameter,我们可以使用Query接口将一个参数绑定到name参数上:
List result = session.createQuery(queryString)
.setString(“name”, user.getUserName())
.list();
6.文件上传漏洞。前台仅使用JS对文件后缀做了过滤,这只能针对普通的用户,而恶意攻击者完全可以修改表单去掉JS校验。
解决方案:前台JS过滤加服务器端程序过滤。具体过滤掉哪些文件类型视具体情况而定。
7.可执行脚本漏洞。对用户提交的数据未转义,一些用户提交的含有JavaScript脚本的信息被直接输出到页面中从而被浏览器执行。
解决方案:使用org.apache.commons.lang.StringEscapeUtils对用户提交的数据进行转义。如:
@RequestMapping(params=“method=addTopic”,method=RequestMethod.POST)public ModelAndView addTopic(HttpServletRequest request, HttpServletResponse response, BbsTopic topic){
BaseAdmin user = (BaseAdmin) request.getSession().getAttribute(Constant.SESSION_USER);
topic.setBaseAdmin(user);
topic.setTopicDate(new Timestamp(System.currentTimeMillis()));
topic.setTopicContent(StringEscapeUtils.escapeHtml(topic.getTopicContent()));
topic.setTopicTitle(StringEscapeUtils.escapeHtml(topic.getTopicTitle()));this.bbsTopicService.save(topic);return new ModelAndView(new RedirectView(“bbs.do?method=topicList&bfid=”+ topic.getBfid()));}
8.Java WEB容器默认配置漏洞。如TOMCAT后台管理漏洞,默认用户名及密码登录后可直接上传war文件获取webshell。
解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。
9、 日志,建议增加服务的访问日志,记录来访者的 IP ,传递参数,对后台操作用户建立日志,记录其操作内容。完善的日志记录可以帮助你发现潜在的危险,找到已经发生的问题。
原文链接:https://www.cnblogs.com/lhhitnote/p/5531567.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/17763