Java WEB安全问题及解决方案

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。

解决方案:

最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。

时间: 2024-10-19 00:22:14

Java WEB安全问题及解决方案的相关文章

java web中文乱码解决方案

出现乱码情况 按HTTP请求方式可分为三种 POST,这种乱码其实最容易解决,以spring为例,设置过滤器强制转换字符编码为UTF-8即可. GET,中文字符在URL串中. 解决方法一:在后台取参数值的时候转码 如: String str = new String(param.getString("ISO-8859-1"),"UTF-8"); 此办法确实可行,但在客户端请求字符编码不是ISO-8859-1时,将得不到正确的中文. 解决方法二:在发布中间件上增加UR

Java Web项目中HTML文件中的汉字在浏览器中显示乱码的解决方案

今天在做一个Java Web项目的时候,html中的汉字在浏览器中显示为乱码,分析其可能原因有: (1)html文件属性中有默认的编码方式,如果它的设置与html文档中content charset属性设置有冲突,则显示为乱码. (2)与浏览器有关,如果html的编码方式与浏览器默认的编码方式不同,则会出现乱码. 下面直接上图,看我的实验: (1)html的文件属性和content charset都设置为UTF-8,但是浏览器默认是GBK编码,显示乱码.我用了谷歌Chrome浏览器和搜狗浏览器都

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

asp.net MVC 常见安全问题及解决方案

asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为"one click attack"或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用) 详细说明: http://imroot.diandian.com/post/2010-11-21/40031442584 Example :            在登陆状态下进入了攻击网站向安全站点发送了请求. Solut

关于java web开发需要哪些技术要求(简单的web界面管理系统)

目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Java的WEB项目需要掌握的技术如下: lJava语言 l面向对象分析设计思想 l设计模式和框架结构 lXML语言 l网页脚本语言 l数据库 l应用服务器 l集成开发环境 下面我们具体地看每个技术. 1.Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servle

2016.5.5(Java Web工作原理)

建动态服务器端内容的过程 CGI技术 微软的ASP和ASP.NET技术 基于Java的Servlet/JSP技术 HTTP是一种超文本协议,一种无状态的协议 HTTP请求分为:1.请求行 2.请求头 3.消息体 4.分隔请求头 5.消息体空行 HTTP 1.1 版本中,定义了有八种可能的HTTP请求方法:1.get:用于向服务器检索资源.(查找)2.post:用于向服务器发送数据,并要求指定的url处理.(新增输入)3.head:与get方法相同,服务器只返回转台行和头标,并不返回请求文档.4.

java web学习笔记-jsp篇

转载自:http://www.cnblogs.com/happyfans/archive/2015/03/17/4343571.html 1.java web简介 1.1静态页面与动态页面   表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,java/c#/php,javascript,xml,主流的动态网页脚本(jsp,asp.net,php) 1.2搭建java web开发环境 jdk1.7+tomc

Java Web项目开发到底需要掌握哪些技术?

目前, 国内外信息化建设已经进入基于Web应用为核心的阶段, Java作为应用于网络的最好语言,前景无限看好.然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情.概括一下,实施Java的WEB项目需要掌握的技术如下: lJava语言 l面向对象分析设计思想 l设计模式和框架结构 lXML语言 l网页脚本语言 l数据库 l应用服务器 l集成开发环境 下面我们具体地看每个技术. 1.Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servle

java Web 学习笔记一

一.HTML协议 html协议:超文本传送协议(HyperText Transfer Protocol)简单的说就是计算机通信信息传输的一套规则 html协议是不记录状态的协议 不保持连接状态的协议 当需要发出请求时和服务器连接完成传输后就断开 Html的四个步骤: 一是客户端与web服务器建立连接:通过IO流进行输入和输出 二是客户端发送http请求:请求内容包括请求行.空行.请求头.消息体 请求行由三部分组成:请求HTTP的方法.请求URI路径.HTTP的版本信息 HTTP的请求方法包括: