仓酷云

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

[学习教程] JAVA网站制作之JSP平安编程实例浅析(中级)2

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

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

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

x
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。js|平安|编程
4、时候切记SQL注进

一样平常的编程书本在教初学者的时分都不注重让他们从进门时就培育平安编程的习气。出名的《JSP编程头脑与理论》就是如许向初学者树模编写带数据库的登录体系的(数据库为MySQL):

Statementstmt=conn.createStatement();
StringcheckUser="select*fromloginwhereusername=
"+userName+"anduserpassword="+userPassword+"";
ResultSetrs=stmt.executeQuery(checkUser);
if(rs.next())
response.sendRedirect("SuccessLogin.jsp");
else
response.sendRedirect("FailureLogin.jsp");



如许使得尽信书的人临时利用如许后天“带洞”的登录代码。假如数据库里存在一个名叫“jack”的用户,那末在不晓得暗码的情形下最少有上面几种办法能够登录:
用户名:jack
暗码:ora=a
用户名:jack
暗码:or1=1/*
用户名:jackor1=1/*
暗码:(恣意)

lybbs(凌云论坛)ver2.9.Server在LogInOut.java中是如许对登录提交的数据举行反省的:

if(s.equals("")││s1.equals(""))
thrownewUserException("用户名或暗码不克不及空。");
if(s.indexOf("")!=-1││s.indexOf(""")!=-1││s.indexOf(",")!=-1││s.indexOf("")!=-1)
thrownewUserException("用户名不克不及包含",等不法字符。");
if(s1.indexOf("")!=-1││s1.indexOf(""")!=-1││s1.indexOf("*")!=-1││s1.indexOf("")!=-1)
thrownewUserException("暗码不克不及包含"*等不法字符。");
if(s.startsWith(" ")││s1.startsWith(" "))
thrownewUserException("用户名或暗码中不克不及用空格。");



可是我不分明为何他只对暗码而不合错误用户名过滤星号。别的,正斜杠仿佛也应当被列到“黑名单”中。我仍是以为用正则表达式只同意输出指定局限内的字符来得爽性。

这里要提示一句:不要觉得能够依附某些数据库体系生成的“平安性”就能够无效地抵抗一切的打击。pinkeyes的那篇《PHP注进实例》就给那些依附PHP的设置文件中的“magic_quotes_gpc=On”的人上了一课。

5、String对象带来的隐患

Java平台切实其实使平安编程加倍便利了。Java中无指针,这意味着Java程序不再像C那样能对地点空间中的恣意内存地位寻址了。在JSP文件被编译成.class文件时会被反省平安性成绩,比方当会见超越数组巨细的数组元素的实验将被回绝,这在很年夜水平上制止了缓冲区溢出打击。可是,String对象却会给我们带来一些平安上的隐患。假如暗码是存储在JavaString对象中的,则直到对它举行渣滓搜集或历程停止之前,暗码会一向驻留在内存中。即便举行了渣滓搜集,它仍会存在于余暇内存堆中,直到重用该内存空间为止。暗码String在内存中驻留得越久,遭到窃听的伤害性就越年夜。更糟的是,假如实践内存削减,则操纵体系会将这个暗码String换页调剂到磁盘的互换空间,因而简单蒙受磁盘块窃听打击。为了将这类保密的大概性降至最低(但不是打消),您应当将暗码存储在char数组中,并在利用后对其置零(String是不成变的,没法对其置零)。

6、线程平安初探

“JAVA能做的,JSP就可以做”。与ASP、PHP等剧本言语纷歧样,JSP默许是以多线程体例实行的。以多线程体例实行可年夜年夜下降对体系的资本需求,进步体系的并发量及呼应工夫。线程在程序中是自力的、并发的实行路径,每一个线程有它本人的仓库、本人的程序计数器和本人的部分变量。固然多线程使用程序中的年夜多半操纵都能够并行举行,但也有某些操纵(如更新全局标记或处置共享文件)不克不及并行举行。假如没做好线程的同步,在年夜并发量会见时,不必要歹意用户的“热情介入”,成绩也会呈现。最复杂的办理计划就是在相干的JSP文件中加上:指令,使它以单线程体例实行,这时候,一切客户真个哀求以串行体例实行。如许会严峻下降体系的功能。我们能够仍让JSP文件以多线程体例实行,经由过程对函数上锁来对线程举行同步。一个函数加上synchronized关头字就取得了一个锁。看上面的示例:

publicclassMyClass{
inta;
publicInit(){//此办法能够多个线程同时挪用
a=0;
}
publicsynchronizedvoidSet(){//两个线程不克不及同时挪用此办法
if(a>5){
a=a-5;
}
}
}



可是如许仍旧会对体系的功能有必定影响。一个更好的计划是接纳部分变量取代实例变量。由于实例变量是在堆平分配的,被属于该实例的一切线程共享,不是线程平安的,而部分变量在仓库平分配,由于每一个线程都有它本人的仓库空间,以是如许线程就是平安的了。好比凌云论坛中增加密友的代码:

publicvoidaddFriend(inti,Strings,Strings1)
throwsDBConnectException
{
try
{
if……
else
{
DBConnectdbconnect=newDBConnect("insertintofriend(authorid,friendname)values(?,?)");
dbconnect.setInt(1,i);
dbconnect.setString(2,s);
dbconnect.executeUpdate();
dbconnect.close();
dbconnect=null;
}
}
catch(Exceptionexception)
{
thrownewDBConnectException(exception.getMessage());
}
}



上面是挪用:

friendName=ParameterUtils.getString(request,"friendname");
if(action.equals("adduser")){
forumFriend.addFriend(Integer.parseInt(cookieID),friendName,cookieName);
errorInfo=forumFriend.getErrorInfo();
}



假如接纳的是实例变量,那末该实例变量属于该实例的一切线程共享,就有大概呈现用户A传送了某个参数后他的线程转为就寝形态,而参数被用户B偶然间修正,形成密友错配的征象。


那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net比java好。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-21 07:46:05 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
再见西城 该用户已被删除
板凳
发表于 2015-1-28 05:39:38 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
深爱那片海 该用户已被删除
地板
发表于 2015-1-28 17:12:07 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-12 13:25:12 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
只想知道 该用户已被删除
6#
发表于 2015-2-24 02:00:46 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
谁可相欹 该用户已被删除
7#
发表于 2015-2-27 05:10:26 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
简单生活 该用户已被删除
8#
发表于 2015-2-28 01:21:31 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
再现理想 该用户已被删除
9#
发表于 2015-2-28 22:31:33 | 只看该作者
是一种突破用户端机器环境和CPU
透明 该用户已被删除
10#
发表于 2015-3-5 08:43:29 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
爱飞 该用户已被删除
11#
发表于 2015-3-12 02:10:33 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
admin 该用户已被删除
12#
发表于 2015-3-19 17:26:45 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
飘飘悠悠 该用户已被删除
13#
发表于 2015-3-29 18:13:27 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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