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。
解决方案:最好删除,如需要使用它来管理维护,可更改其默认路径,口令及密码。
9、 日志,建议增加服务的访问日志,记录来访者的 IP ,传递参数,对后台操作用户建立日志,记录其操作内容。完善的日志记录可以帮助你发现潜在的危险,找到已经发生的问题。
10.重放攻击.
11.僵尸网络暴力破解(非弱口令)
12,登录表单http明文提交
13.千万不要乱用数据类型。使用基本数据类型,少用包装类。包装类容易被攻击。不要用String去接受所有类型数据。原则上:是什么类型就用什么类型去接收。
14.通过架构设计,添加一层设置处理http参数(验证数据的类型、合法性、长度和范围)。一般都是通过aop来实现。比如:对邮件、手机的验证,对非法数字(小于0)的验证,对整数最大值的验证,对字符串最大长度的验证等。
15,点击劫持.大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面;二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义;
将 MyEclipse 工具中的 Java 项目转换为 Web 项目时,需要注意以下几点: 1. 确认项目类型:在 MyEclipse 中创建 Java 项目时,需要选择项目类型为“Java 项目”,而转换为 Web 项目时,需要选择“Web 项目”。因此,在转换项目类型之前,需要确认项目的类型。 2. 添加 Web 项目支持:转换为 Web 项目后,需要添加 Web 项目的支持。在 MyEclipse 中,可以通过右键单击项目名称,选择“Properties”菜单,在弹出的对话框中,选择“Project Facets”选项卡,勾选“Dynamic Web Module”选项,然后点击“Apply”和“OK”按钮保存更改。 3. 配置 Web 项目部署路径:转换为 Web 项目后,需要配置项目的部署路径。在 MyEclipse 中,可以通过右键单击项目名称,选择“Properties”菜单,在弹出的对话框中,选择“Web Project Settings”选项卡,配置项目的部署路径。 4. 导入 Web 相关库文件:转换为 Web 项目后,可能需要导入一些 Web 相关的库文件,如 Servlet、JSP、JSTL 等。可以通过右键单击项目名称,选择“Properties”菜单,在弹出的对话框中,选择“Java Build Path”选项卡,然后点击“Add Library”按钮,选择需要导入的库文件,最后点击“OK”按钮保存更改。 5. 修改项目结构:转换为 Web 项目后,可能需要修改项目结构,如将 Java 类文件放置在 src/main/java 目录下,将 Web 资源文件放置在 src/main/webapp 目录下。可以通过右键单击项目名称,选择“Properties”菜单,在弹出的对话框中,选择“Java Build Path”选项卡,然后点击“Source”选项卡,修改源代码和 Web 资源文件的路径。 以上就是将 MyEclipse 工具中的 Java 项目转换为 Web 项目时需要注意的几点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值