第一篇:javaWeb安全验证漏洞修复总结
EMA服务管理平台二期扩容安全验收
漏洞修复总结
2011年5月
中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
目 录 2 WEB安全介绍..........................................................................................................................1 SQL注入、盲注.......................................................................................................................1 2.1 SQL注入、盲注概述.................................................................................................................1 2.2 2.4 3 安全风险及原因...................................................................................................................2 应用程序解决方案...............................................................................................................4 2.3 APPSCAN扫描建议......................................................................................................................2
会话标识未更新.......................................................................................................................7 3.1 3.2 3.4 会话标识未更新概述...........................................................................................................7 安全风险及原因分析...........................................................................................................8 应用程序解决方案...............................................................................................................8 3.3 APPSCAN扫描建议......................................................................................................................8 已解密登录请求.......................................................................................................................9 4.1 4.2 4.4 已解密登录请求概述...........................................................................................................9 安全风险及原因分析...........................................................................................................9 应用程序解决方案...............................................................................................................9 4.3 APPSCAN扫描建议......................................................................................................................9 跨站点请求伪造.....................................................................................................................11 5.1 5.2 5.4 跨站点请求伪造概述.........................................................................................................11 安全风险及原因分析.........................................................................................................12 应用程序解决方案.............................................................................................................13 5.3 APPSCAN扫描建议....................................................................................................................13 不充分账户封锁.....................................................................................................................13 6.1 6.2 6.4 不充分账户封锁概述.........................................................................................................13 安全风险及原因分析.........................................................................................................13 应用程序解决方案.............................................................................................................14 6.3 APPSCAN扫描建议....................................................................................................................14 启用不安全HTTP方法...........................................................................................................14 7.1 7.2 7.4 启用不安全HTTP方法概述...............................................................................................14 安全风险及原因分析.........................................................................................................15 应用程序解决方案.............................................................................................................15 7.3 APPSCAN扫描建议....................................................................................................................15 HTTP注释敏感信息...............................................................................................................16 8.1 HTTP注释敏感信息概述........................................................................................................16 8.2 8.4 安全风险及原因分析.........................................................................................................16 应用程序解决方案.............................................................................................................17 8.3 APPSCAN扫描建议....................................................................................................................16 发现电子邮件地址模式.........................................................................................................17
中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
9.1 9.2 9.4 10 发现电子邮件地址模式概述.............................................................................................17 安全风险及原因分析.........................................................................................................17 应用程序解决方案.............................................................................................................17 9.3 APPSCAN扫描建议....................................................................................................................17
通过框架钓鱼.........................................................................................................................20
通过框架钓鱼概述.............................................................................................................20 安全风险及原因分析.........................................................................................................20 APPSCAN扫描建议...............................................................................................................21 应用程序解决方案.............................................................................................................23 10.1 10.2 10.3 10.4 11 检查到文件替代版本.............................................................................................................25
检查到文件替代版本概述.................................................................................................25 安全风险及原因分析.........................................................................................................26 APPSCAN扫描建议...............................................................................................................26 应用程序解决方案.............................................................................................................26 11.1 11.2 11.3 11.4
中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 Web安全介绍
目前很多业务都依赖于互联网,例如说网上银行、网络购物、网游等,很多恶意攻击者出于不良的目的对Web 服务器进行攻击,想方设法通过各种手段获取他人的个人账户信息谋取利益。正是因为这样,Web业务平台最容易遭受攻击。同时,对Web服务器的攻击也可以说是形形色色、种类繁多,常见的有挂马、SQL注入、缓冲区溢出、嗅探、利用IIS等针对Webserver漏洞进行攻击。
一方面,由于TCP/IP的设计是没有考虑安全问题的,这使得在网络上传输的数据是没有任何安全防护的。攻击者可以利用系统漏洞造成系统进程缓冲区溢出,攻击者可能获得或者提升自己在有漏洞的系统上的用户权限来运行任意程序,甚至安装和运行恶意代码,窃取机密数据。而应用层面的软件在开发过程中也没有过多考虑到安全的问题,这使得程序本身存在很多漏洞,诸如缓冲区溢出、SQL注入等等流行的应用层攻击,这些均属于在软件研发过程中疏忽了对安全的考虑所致。
另一方面,用户对某些隐秘的东西带有强烈的好奇心,一些利用木马或病毒程序进行攻击的攻击者,往往就利用了用户的这种好奇心理,将木马或病毒程序捆绑在一些艳丽的图片、音视频及免费软件等文件中,然后把这些文件置于某些网站当中,再引诱用户去单击或下载运行。或者通过电子邮件附件和QQ、MSN等即时聊天软件,将这些捆绑了木马或病毒的文件发送给用户,利用用户的好奇心理引诱用户打开或运行这些文件、SQL注入、盲注 2.1 SQL注入、盲注概述
Web 应用程序通常在后端使用数据库,以与企业数据仓库交互。查询数据库事实上的标准语言是 SQL(各大数据库供应商都有自己的不同版本)。Web 应用程序通常会获取用户输入(取自 HTTP 请求),将它并入 SQL 查询中,然后发送到后端数据库。接着应用程序便处理查询结果,有时会向用户显示结果。如果应用程序对用户(攻击者)的输入处理不够小心,攻击者便可以利用这种操作方式。在此情况下,攻击者可以注入恶意的数据,当该数据并入 SQL 查询中时,就将查询的原始语法更改得面目全非。例如,如果应用程序使用用户的输入(如用户名和密码)来查询用户帐户的数据库表,以认证用户,而攻击者能够将恶意数据注入查询的用户名部分(和/或密码部分),查询便可能更改成 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
完全不同的数据复制查询,可能是修改数据库的查询,或在数据库服务器上运行 Shell 命令的查询。2.2 安全风险及原因
高风险漏洞,攻击者可能会查看、修改或删除数据库条目和表
原因:未对用户输入正确执行危险字符清理
2.3 AppScan扫描建议
若干问题的补救方法在于对用户输入进行清理。通过验证用户输入未包含危险字符,便可能防止恶意的用户导致应用程序执行计划外的任务,例如:启动任意 SQL 查询、嵌入将在客户端执行的 Javascript 代码、运行各种操作系统命令,等等。建议过滤出所有以下字符: [1] |(竖线符号)[2] &(& 符号)[3];(分号)
[4] $(美元符号)[5] %(百分比符号)[6] @(at 符号)[7] '(单引号)[8] “(引号)
[9] '(反斜杠转义单引号)[10] ”(反斜杠转义引号)[11] <>(尖括号)[12]()(括号)[13] +(加号)
[14] CR(回车符,ASCII 0x0d)[15] LF(换行,ASCII 0x0a)[16] ,(逗号)[17](反斜杠)
以下部分描述各种问题、问题的修订建议以及可能触发这些问题的危险字符: SQL 注入和 SQL 盲注:
A.确保用户输入的值和类型(如 Integer、Date 等)有效,且符合应用程序预期。
B.利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。当使用存储过程时,请利用 ADO 命令对象来实施它们,以强化变量类型。C.清理输入以排除上下文更改符号,例如: [1] '(单引号)[2] “(引号)
[3] '(反斜线转义单引号)中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
[4] ”(反斜杠转义引号)[5])(结束括号)[6];(分号)跨站点脚本编制:
A.清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符: [1] <>(尖括号)[2] “(引号)[3] '(单引号)[4] %(百分比符号)[5];(分号)[6]()(括号)[7] &(& 符号)[8] +(加号)
B.如果要修订 <%00script> 变体,请参阅 MS 文章 821349 C.对于 UTF-7 攻击: [-] 可能的话,建议您施行特定字符集编码(使用 'Content-Type' 头或 标记)。
HTTP 响应分割:清理用户输入(至少是稍后嵌入在 HTTP 响应中的输入)。请确保输入未包含恶意的字符,例如: [1] CR(回车符,ASCII 0x0d)[2] LF(换行,ASCII 0x0a)远程命令执行:清理输入以排除对执行操作系统命令有意义的符号,例如: [1] |(竖线符号)[2] &(& 符号)[3];(分号)
执行 shell 命令:
A.绝不将未检查的用户输入传递给 eval()、open()、sysopen()、system()之类的 Perl 命令。
B.确保输入未包含恶意的字符,例如: [1] $(美元符号)[2] %(百分比符号)[3] @(at 符号)
XPath 注入:清理输入以排除上下文更改符号,例如: [1] '(单引号)[2] ”(引号)等 LDAP 注入:
A.使用正面验证。字母数字过滤(A..Z,a..z,0..9)适合大部分 LDAP 查询。B.应该过滤出或进行转义的特殊 LDAP 字符: [1] 在字符串开头的空格或“#”字符 [2] 在字符串结尾的空格字符 [3] ,(逗号)[4] +(加号)[5] “(引号)[6](反斜杠)[7] <>(尖括号)中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
[8];(分号)[9]()(括号)MX 注入:
应该过滤出特殊 MX 字符: [1] CR(回车符,ASCII 0x0d)
[2] LF(换行,ASCII 0x0a)记录伪造: 应该过滤出特殊记录字符: [1] CR(回车符,ASCII 0x0d)[2] LF(换行,ASCII 0x0a)[3] BS(退格,ASCII 0x08)ORM 注入:
A.确保用户输入的值和类型(如 Integer、Date 等)有效,且符合应用程序预期。
B.利用存储过程,将数据访问抽象化,让用户不直接访问表或视图。C.使用参数化查询 API D.清理输入以排除上下文更改符号,例如:(*): [1] '(单引号)[2] ”(引号)
[3] '(反斜线转义单引号)[4] “(反斜杠转义引号)[5])(结束括号)[6];(分号)2.4 应用程序解决方案
1、我们为了调试方便,在页面上会抛出数据库异常信息,如果入侵工具获取了这些信息,就可以获取系统的一些配置信息,如web系统框架、采用的数据库等,从而找出系统漏洞。所以不要在页面上抛出异常的详细信息,这些信息对客户并没有用,只是方便技术人员调试罢了,处理方法是在异常处理页面把打印异常代码删除即可;
2、新建一个过滤器,通过过滤器过滤SQL注入特殊字符,配置成功后,重启服务,用Appsan工具扫描,漏洞得到解决,通过过滤器可以解决SQL注入、跨站点脚本编制及通过框架钓鱼等问题,具体实现方式如下:
1、在web.xml文件中配置过滤器
2、过滤器过滤代码
public class InjectFilter extends IsmpServletFilter {
private String failPage = ”/loginout.jsp“;//发生注入时,跳转页面
public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterchain)throws IOException, ServletException { //判断是否有注入攻击字符
HttpServletRequest req =(HttpServletRequest)request;
String inj = injectInput(req);if(!inj.equals(”“)){ request.getRequestDispatcher(failPage).forward(request, return;response);} else { // 传递控制到下一个过滤器
filterchain.doFilter(request, response);} } /** * 判断request中是否含有注入攻击字符 * @param request * @return */ public String injectInput(ServletRequest request){
Enumeration e = request.getParameterNames();String attributeName;String attributeValues[];String inj = ”“;
while(e.hasMoreElements()){ attributeName =(String)e.nextElement();//不对密码信息进行过滤,一般密码中可以包含特殊字符
if(attributeName.equals(”userPassword“)||attributeName.equals(”co
||attributeName.equals(“password”)||attributeName.equals(“PASSWOR continue;nfirmPassword”)||attributeName.equals(“PASSWORD”)D2“)||attributeName.equals(”valiPassword“)){ 5 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
}
attributeValues = request.getParameterValues(attributeName);
for(int i = 0;i < attributeValues.length;i++){
if(attributeValues[i]==null||attributeValues[i].equals(”“))
continue;
inj = injectChar(attributeValues[i]);
if(!inj.equals(”“)){
return inj;
}
} } return inj;} /** * 判断字符串中是否含有注入攻击字符 * @param str * @return */ public String injectChar(String str){
String inj_str = ”“)' * %”;String inj_stra[] = inj_str.split(“ ”);
for(int i = 0;i < inj_stra.length;i++){ if(str.indexOf(inj_stra[i])>=0){ return inj_stra[i];} } return “";}
}
中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 会话标识未更新 3.1 会话标识未更新概述
“会话固定”是一种攻击技术,会强制用户的会话标识变成显式值。固定会话标识值的技术有许多种,会随着目标 Web 站点的功能而不同。从利用“跨站点脚本编制”到向 Web 站点密集发出先前生成的 HTTP 请求,都在这些技术范围内。用户的会话标识固定之后,攻击者会等待用户登录,然后利用预定义的会话标识值来假定用户的联机身份。
一般而言,对于标识值的会话管理系统有两种类型。第一种类型是“宽容”系统,可让 Web 浏览器指定任何标识。第二种类型是“严格”系统,只接受服务器端生成的值。当使用宽容系统时,不需要联系 Web 站点,便可以维护任何会话标识。在严格系统中,攻击者需要维护“陷阱会话”并且必须定期联系 Web 站点,才能防止闲置超时。对于会话固定,倘若没有活动保护,使用会话来识别已认证的用户的任何 Web 站点都可能受到攻击。使用会话标识的 Web 站点通常都是基于 cookie 的站点,但也会使用 URL 和隐藏的表单字段。不幸的是,基于 cookie 的会话最容易受到攻击。目前已识别的大多数攻击方法都是针对 cookie 的固定。相对于在用户登录 Web 站点之后,再窃取用户的会话标识,会话固定提供的机会多得多。
在用户登录之前,攻击的活动部分便已启动。
会话固定攻击过程通常由三个步骤组成:
1)安装会话
攻击者针对目标 Web 站点设下“陷阱会话”,并获取这个会话的标识,攻击者也可以选择攻击中所用的任意会话标识。在某些情况下,必须反复联系 Web 站点,才能维护确定好的陷阱会话值。
2)固定会话
攻击者将陷阱会话值引进用户的浏览器中,固定用户的会话标识。
3)进入会话
用户登录目标 Web 站点之后,当使用固定会话标识值时,攻击者便可加以接管。”
修改
对于这类问题解决方案为在用户进入登录页面时清空session让cookie过期
request.getSession(true).invalidate();//清空session Cookie cookie = request.getCookies()[0];//获取cookie cookie.setMaxAge(0);//让cookie过期
另外一种方式利用JSP的一些特性,不让登录页面产生Session <% page session=”false” %> 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
3.2 安全风险及原因分析
高风险漏洞,可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务
原因:Web 应用程序编程或配置不安全
3.3 AppScan扫描建议
始终生成新的会话,供用户成功认证时登录。防止用户操纵会话标识。
请勿接受用户浏览器登录时所提供的会话标识
3.4 应用程序解决方案
会话标识未更新,Appscan给出的描述是建议用户每次登录时需使用新的会话标识。应用程序实现上就是在登录模块,添加以下代码,即用户登录后,重新生成会话。
HttpSession session = request.getSession(false);if(session!=null){ //让cookie过期
session.invalidate();
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期 } request.getSession(true);//生成新会话
经过测试,这段代码只在weblogic和tomcat下才有效,在公司中间件webspeed及jboss6.0下问题都依然存在,但从扫描的结果信息分析看,漏洞已经解决,分析判断应该只是session处理机制不同,AppScan工具仍认为存在漏洞风险。在与电信沟通中我们存在一个经验教训大家一定要吸取,不能过渡迷信流行的自动化测试工具,尤其是对于Appscan这种判断防御行为的复杂软件,仅靠有限的规则设置就当做是web安全的唯一标准这显然不太合理,这种情况一定要与测试方沟通解释。
另一方面,对于公司的产品webspeed,也想提点建议,商务项目采用公司的产品为公司节约了不少成本,但是我们产品后续升级维护也必须重视起来,当确认出是webspeed本身问题后,联系vasg相关人员进行协调解决,根本没有非常了解该产品技术人员支持,只是一个刚入职的同事在配合测试。调试了一周时间仍不能解决,最后只能作为一个遗留问题搁置。公司一直在向产品化转变,但是自身的产品维护、升级、管理仍然需要改进。
中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 已解密登录请求 4.1 已解密登录请求概述
在应用程序测试过程中,检测到将未加密的登录请求发送到服务器。由于登录过程所用的部分输入字段(例如:用户名、密码、电子邮件地址、社会保险号码,等等)是个人敏感信息,建议通过加密连接(如 SSL)将其发送到服务器。任何以明文传给服务器的信息都可能被窃,稍后可用来电子欺骗身份或伪装用户。此外,若干隐私权法规指出,用户凭证之类的敏感信息一律以加密方式传给网站。
4.2 安全风险及原因分析
安全风险中,可能会窃取诸如用户名和密码等未经加密即发送了的用户登录信息
原因:诸如用户名、密码和信用卡号之类的敏感输入字段未经加密即进行了传 递
4.3 AppScan扫描建议
1.确保所有登录请求都以加密方式发送到服务器。2.请确保敏感信息,例如:密码
-社会保险号码驾照号码
-电子邮件地址邮政编码
一律以加密方式传给服务器。4.4 应用程序解决方案
已解密的登录请求,要求就是数据要加密传输。最简单有效的解决方式采用SSL加密协议传输,但是由于EMA服务管理平台业务的特殊性,采用SSL加密方式对现有的业务影响太大,所以最终没有采用此种方式解决该问题,但个人在进行测试过程中也尝试在tomcat和jboss下SSL方式配置,写下来供参考。
中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结
Jboss内核也是tomcat,所以两者配置基本都是一样,都是在生成证书文件后,在service.xml 进行配置:
1.进入到cmd 进入到jdk bin目录下执行keytool-genkey-alias tomcat-keyalg RSA-keystore webspeed.keystore 生成证书 2.在service.xml配置SSL keystoreFile=”C:tomcat-5.5.26confwebspeed.keystore“ keystorePass=”1111aaaa“/> 这样配置后虽然可以通过https访问,但仍然还可以通过8080使用普通的http访问,所以还必须禁止普通模式登录。所以还得在web.xml添加配置。01 “跨站点伪造请求(CSRF)”攻击可让黑客以受害者的名义在易受攻击的站点上运行操作。当易受攻击的站点未适当验证请求来源时,便可能出现这个攻击。这个漏洞的严重性取决于受影响的应用程序的功能,例如,对搜索页面的 CSRF 攻击,严重性低于对转帐页面或概要更新页面的 CSRF 攻击。 这项攻击的执行方式,是强迫受害者的浏览器向易受攻击的站点发出 HTTP 请求。如果用户目前已登录受害者站点,请求会自动使用用户的凭证(如会话 Cookie、用户的 IP 地址,以及其他浏览器认证方法)。攻击者利用这个方法来伪造受害者的身份,再代替他来提交操作。换句话来说,易受攻击的站点未采取适当措施来验证用户实际是否想执行特定操作。强迫受害者发送非预期的请求,方法有许多种: -通过电子邮件向受害者发送易受攻击应用程序的恶意链接。在公共论坛中,张贴易受攻击站点的链接。中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 -利用站点(或另一个站点)的“跨站点脚本编制”或“链接注入”漏洞,将浏览器自动重定向到易受攻击的站点。 如果攻击者利用易受攻击的站点本身的“链接注入”漏洞,可以增加用户通过站点认证的可能性,进而增加攻击成功的可能性。 例如,攻击者可以利用上述任何选项来诱惑受害者查看含有下列条目的页面: 这会使受害者的浏览器自动请求 URL 及浏览器的当前凭证。如果这个银行业站点易受到 CSRF 攻击,它会根据应用程序逻辑,从受害者的帐户中,将 1000 美元转账到 John 的银行帐户。“跨站点伪造请求”攻击也称为 CSRF(发音为 C-Serf)、XSRF、“跨站点伪造引用”、“单键攻击”以及“会话骑乘”。您可以利用下列方式来验证您的应用程序是否易受到 CSRF 攻击: [1] 检查易受攻击的链接/请求是否未包括攻击者难以猜中的参数 [2] 检查易受攻击的链接/请求是否会执行只应自愿执行的操作 含有用户在不知不觉中提交的请求所能直接访问的敏感操作的应用程序,被视为很容易遭受 CSRF 攻击。CSRF 也可能出现在登录页面和注销页面上。由于攻击者可以伪造来自受害者的连续注销请求,因此 CSRF 可能导致服务拒绝。在登录页面上,CSRF 可以允许攻击者使用包含攻击者用户名和密码的伪造请求来将客户机登录到攻击者的账户中。登录 CSRF 攻击会带有严重的后果,这取决于其他站点行为。例如,如果站点保留了用户操作的历史记录(例如搜索历史记录),那么攻击者将能够在易受攻击的站点上查看受害者之前执行的操作。5.2 安全风险及原因分析 安全风险中,可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务 原因:应用程序使用的认证方法不充分 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 5.3 AppScan扫描建议 如果要避免 CSRF 攻击,每个请求都应该包含唯一标识,它是攻击者所无法猜测的参数。建议的选项之一是添加取自会话 cookie 的会话标识,使它成为一个参数。服务器必须检查这个参数是否符合会话 cookie,若不符合,便废弃请求。攻击者无法猜测这个参数的原因是应用于 cookie 的“同源策略”,因此,攻击者无法伪造一个虚假的请求,让服务器误以为真。攻击者难以猜测且无法访问的任何秘密(也就是无法从其他域访问),都可用来替换会话标识。这可以防止攻击者设计看似有效的请求。 5.4 应用程序解决方案 已解密的登录请求,要求就是数据要加密传输。最简单有效的解决方式采用SSL加密协议传输,但是由于EMA服务管理平台业务的特殊性,采用SSL加密方式对现有的业务影响太大,所以最终没有采用此种方式解决该问题,但个人在进行测试过程中也尝试在tomcat和jboss下SSL方式配置,写下来供参考。6 不充分账户封锁 6.1 不充分账户封锁概述 蛮力攻击是指恶意用户发送大量可能的密码和/或用户名以访问应用程序的尝试。由于该技术包含大量登录尝试,未限制允许的错误登录请求次数的应用程序很容易遭到这类攻击。因此,强烈建议您对帐户限制允许的错误登录尝试次数,超过该次数,便锁定该帐户。样本利用: 下列请求说明密码猜测请求: http://site/login.asp?username=EXISTING_USERNAME&password=GUESSED_PASSWORD 如果站点在若干次错误尝试之后并不锁定测试的帐户,攻击者最终可能会发现帐户密码,并使用它来假冒帐户的合法用户。6.2 安全风险及原因分析 安全风险高,可能会升级用户特权并通过 Web 应用程序获取管理许可权 原因:Web 应用程序编程或配置不安全 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 6.3 AppScan扫描建议 请确定允许的登录尝试次数(通常是 3-5 次),确保超出允许的尝试次数之后,便锁定帐户。为了避免真正的用户因帐户被锁定而致电支持人员的麻烦,可以仅临时性暂挂帐户活动,并在特定时间段之后启用帐户。帐户锁定大约 10 分钟,通常便足以阻止蛮力攻击。 6.4 应用程序解决方案 根据扫描建议,web应用程序设定允许登录尝试次数,登录连续失败超过设定次数,就锁定用户,失败次数灵活配置。 在用户登录时进行验证: if(!encrypter.encrypt(userPassword).equalsIgnoreCase({ } //更新此用户登录失败次数 this.updateLoginFailTimes(userCode);//如果用户连续登录失败次数超过配置值则将其锁定 int loginLockTimes=this.getLoginLockTimes();if(this.getLoginFailTimes(userCode)>=loginLockTimes){ } throw new MySecurityException(”密码不正确!用户:“ + userCode);this.lockUser(userCode);user.getLOGIN_PASSWD()== null ? ”“ : user.getLOGIN_PASSWD()))7 启用不安全HTTP方法 7.1 启用不安全HTTP方法概述 似乎 Web 服务器配置成允许下列其中一个(或多个)HTTP 方法(动词): -DELETE COPY PROPFIND LOCK-UNLOCK 这些方法可能表示在服务器上启用了 WebDAV,可能允许未授权的用户对其进行利用。 7.2 安全风险及原因分析 安全风险中,可能会在 Web 服务器上上载、修改或删除 Web 页面、脚本和文件 原因:Web 服务器或应用程序服务器是以不安全的方式配置的 7.3 AppScan扫描建议 如果服务器不需要支持 WebDAV,请务必禁用它,或禁止不必要的 HTTP 方法(动词)。 7.4 应用程序解决方案 修改web工程中web.xml,增加安全配置信息,禁用不必要HTTP方法 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 。 很多 Web 应用程序程序员使用 HTML 注释,以在需要时帮助调试应用程序。尽管添加常规注释有助于调试应用程序,但一些程序员往往会遗留重要数据(例如:与 Web 应用程序相关的文件名、旧的链接或原非供用户浏览的链接、旧的代码片段等)。8.2 安全风险及原因分析 安全风险低,能会收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置 原因:程序员在 Web 页面上留下调试信息 8.3 AppScan扫描建议 [1] 请勿在 HTML 注释中遗留任何重要信息(如文件名或文件路径)。 [2] 从生产站点注释中除去以前(或未来)站点链接的跟踪信息。 [3] 避免在 HTML 注释中放置敏感信息。 [4] 确保 HTML 注释不包括源代码片段。 [5] 确保程序员没有遗留重要信息。 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 8.4 应用程序解决方案 虽然这个漏洞为低级别漏洞,但电信方也是要求必须修复,要修改此漏洞需要检查工程中的每一个jsp页面,工作量还是挺大。所以在后续开发过程中注释尽量写英文注释,尽量不要遗留敏感注释信息在jsp代码中,养成良好的编码习惯才是解决问题根本。发现电子邮件地址模式 9.1 发现电子邮件地址模式概述 Spambot 搜寻因特网站点,开始查找电子邮件地址来构建发送自发电子邮件(垃圾邮件)的邮件列表。AppScan 检测到含有一或多个电子邮件地址的响应,可供利用以发送垃圾邮件。而且,找到的电子邮件地址也可能是专用电子邮件地址,对于一般大众应是不可访问的。9.2 安全风险及原因分析 安全风险低,能会收集有关 Web 应用程序的敏感信息,如用户名、密码、机器名和/或敏感文件位置 原因:Web 应用程序编程或配置不安全 9.3 AppScan扫描建议 从 Web 站点中除去任何电子邮件地址,使恶意的用户无从利用。 9.4 应用程序解决方案 根据扫描建议删除注释中出现email地址信息,如果页面中要显示mail地址转为图片形式展示。如:ema服务管理平台首页需要展示客户联系方式,并且联系方式、email等信息,这些信息用户都是可以自行修改的,因为包含了email地址,所以联系方式就转为图片形式: <%@ page language=”java“ contentType=”text/html;charset=gb2312“%> <%@ include file=”/common/taglib.jsp“ %> <%@ include file=”/common/chart.jsp“ %> <%@ page import=”java.util.List,java.util.*,java.awt.*,java.awt.image.*,com.su 17 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 n.image.codec.jpeg.*,java.util.*“ %> <%@ page import=”com.sitech.ismp.informationService.publish.dao.TB_SYS_SUPPORT_STAFFDao“ %> <% List typeList =(List)request.getAttribute(”typeList“);out.clear();out = pageContext.pushBody();response.addHeader(”pragma“,”NO-cache“);response.addHeader(”Cache-Control“,”no-cache“);response.addDateHeader(”Expries“,0);int rowheight=20; int width=135,height=rowheight*typeList.size();String ty= ”“;String mob=”“;for(int i=0;i HashMap hm=(HashMap)typeList.get(i);ty=(String)hm.get(”TYPE_ID“);List sta =(List)dao.findSupportStaffByTypeId(ty);for(int k=0;k TB_SYS_SUPPORT_STAFFDao dao= new TB_SYS_SUPPORT_STAFFDao();response.setContentType(”image/jpeg“); 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 HashMap map =(HashMap)sta.get(k); mob =(String)map.get(”MOBILE“); height+=3*rowheight; if(mob!=null)height+=rowheight; } } BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();g.setColor(Color.white);g.fillRect(0, 0, width, height);g.setColor(Color.BLUE);Font font=new Font(”宋体“,Font.PLAIN,13);g.setFont(font);int row=0; String typeid = ”“; String typename=”“; String name = ”“; String tel=”“; String mail = ”“; String mobile=”“; for(int i=0;i HashMap hm=(HashMap)typeList.get(i); typeid=(String)hm.get(”TYPE_ID“); typename=(String)hm.get(”TYPE_NAME“); row++; g.drawString(typename,0,(row-1)*rowheight+10); List staffs =(List)dao.findSupportStaffByTypeId(typeid); for(int k=0;k HashMap map =(HashMap)staffs.get(k); name =(String)map.get(”NAME“); tel =(String)map.get(”TEL“); mail =(String)map.get(”MAIL“); mobile =(String)map.get(”MOBILE“); row++; g.drawString(name+”:"+tel,0,(row-1)*rowheight+10); row++; g.drawString(mail,0,(row-1)*rowheight+10); if(mobile!=null){ row++; g.drawString(mail,0,(row-1)*rowheight+10);} 19 中国电信EMA服务管理平台二期扩容安全验收漏洞修复总结 } } g.dispose();ServletOutputStream outStream = response.getOutputStream(); JPEGImageEncoder encoder encoder.encode(image);outStream.close();=JPEGCodec.createJPEGEncoder(outStream);%> JavaWeb B/S与C/S的区别 1,从安装上来讲,B/S只需要在服务器端安装即可,而C/S却需要每一个客户端进行安装。2,从部署上来说,B/S只需要服务器能够支持即可,而C/S却对每一个客户端的电脑提出了要求。 3,从升级,维护角度来说,B/S只需要在服务器端升级维护即可,像网易的邮箱,而C/S却是服务器更新维护一次,客户端就要下载相关的补丁才能使用 4,从安全性来讲,B/S是基于服务器的,较之C/S安全性好 5,从本质上来说,B/S是基于请求驱动的,即客户端发送一个Http请求,然后服务器进行处理之后,响应给客户端,而C/S却是基于事件驱动的,像腾讯的QQ。 6,从耦合度来讲,B/S与服务器端耦合,而C/S却是与客户端的操作系统进行耦合。但是Client/Server(从游戏的角度来讲)较之Brows/Server具有优质的画面。 Servlet的使用步骤: 1,创建一个JAVA类,存放在com.fit.servlet包中,并且此类extends HttpServlet类,才能成为一个Servlet 2,覆写doGet()和doPost()方法 3,最后,在web.xml文件中进行Servlet配置。具体的配置如下: 就是指Servlet从创建出实例对象到销毁的过程。它是一个容器,负责创建实例来接受客户端的请求,并且以多线程的方式响应给客户。具体过程如下: Servlet被服务器实例化之后,容器运行其init方法进行初始化,请求到达时运行其service方法,在此过程中仅创建一个对象,然后service方法自动调用与请求相应的doXxx方法,当服务器决定将实例进行销毁时,再调用其destroy方法。 与CGI(通用网关接口)的区别在于,Servlet处于服务器进程中,它通过多线程的方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每一个请求都产生新的进程,服务完成后就销毁,所以效率低于Servlet 作用:可以用来进行接收客户端的请求,也可以进行请求流的控制。 Http协议:(了解) 首先它是(Hypertext Transfer Protocol)超文本传输协议。 HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下: 请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体 请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。 应答报文格式如下: 状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体 状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。工作流程: 一次HTTP操作称为一个事务,其工作过程可分为四步: 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客 户机与服务器断开连接。 Javascript的作用: 1,进行验证(通过正则表达式,在css+HTML的部分特性进行浏览器端的格式验证工作) 2,进行交互(将客户端的一个请求通过JavaScript可以发送到服务器端,也可以在浏览器端进行人机的交互,突破了以前静态页面的交互性限制)3,进行特效的处理,如走马灯,时间时钟。 Servlet生命周期:(详细)是指Servlet实例从被创建到其消失(对象销毁,回收)中间的时间及各个阶段,称之为Servlet生命周期。 前提:web服务器加载类。之后执行以下过程: 1,实例化:Servlet容器创建Servlet实例,具体就是当接收到客户端的第一次请求时,Servlet容器负责创建Servlet的一个实例。且在此过程中仅创建一个实例,通过多线程的方式响应客户端的请求 2,初始化:该容器调用init()方法。 3,服务:当请求到达时,该Servlet容器自动调用server()方法,根据客户端发送请求的方式,选择doXxx()方法执行 4,销毁:当web服务器被卸载的时候,调用destroy()方法进行对象的销毁。请看以下的一段代码: package com.fit.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Test extends HttpServlet { private static final long serialVersionUID = 1L; public Test(){ super(); System.out.println(“===========================”); } public void destroy(){ System.out.println(“对象被销毁!”);} public void init()throws ServletException { System.out.println(“对象初始化!”);} protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { System.out.println(“get方法执行”);} protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { this.doGet(request, response);} protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { System.out.println(“服务开始启动了!”); super.service(arg0, arg1);} }运行效果如下: =========================== 对象初始化!服务开始启动了! get方法执行 2011-7-19 12:07:04 org.apache.catalina.core.StandardContext reload 信息: Reloading this Context has started 对象被销毁! 分析原因: 1,实例化对象发生在客户端请求第一次到达的时候,而不是类被加载的时候。2,对象只被实例化一次.3,如果service()被覆写的话,则调用的时候加入super.service(arg0, arg1);这句话时候才可以清楚的调用的doXxx()方法,如果不加入此句话,那么将不会执行doGet()方法。所以一般不要覆写service()方法。只需要覆写doGet()和doPost()方法。 4,当web服务器被卸载的时候,将执行destroy()方法。进行对象的销毁! Jsp页面构成元素,Jsp跟Html的区别,优势 Jsp定义:(Java Server Page)Java服务器端语言,组成如下: 1,静态模板:由HTML,css,JavaScript等元素构成。 2,指令:设定网页元素的属性,用于提供这个歌JSP网页的相关信息。 3,脚本元素--声明:<%!...%>,在此之中可以进行变量,常量的定义,类,方法都可以声明,但是一般不用。 4,脚本元素--Java脚本:<%...%>,在此期间可以进行Java代码的拼写。5,脚本元素--表达式:<%=..%>,用于表达式输出时使用。 6,动作:利用JSP动作可以重用JavaBean组件,可以动态的包含页面,也可以进行服务器端的跳转(即将用户的请求转发给其他的页面)。7,注释: --HTML注释:,此种注释可以在页面中看到,成为客户端注释。--Jsp注释:<%----%>,此种注释在页面中看不到,也成为服务器端注释。--Java注释: 单行注释:// 多行注释:/*„„„*/ Jsp优点:使用HTML,CSS等技术构建页面的模板部分,用Java语言根据用户的输入动态生成可变的内容部分。既可以实现HTML控制页面布局,也亦可以实现Servlet的功能,实现了内容与表示分离。Jsp的常见指令,并说出静态包含和动态包含的区别 Page指令:<%@ page language=”java” import=” 完整的包.类名称” autoFlush=”true[false]” errorPage=”文件名” isErrorPage=”false[true]” isThreadSafe(设置是否能多线程使用)contentType=”text/html;charset=ISO-8859-1” %> 包含指令:<%@ include file=”文件名”%> taglib指令:此指令用于在Jsp页面中引入用户自定义的标签库。例如: <@% taglib url=http://java.sun.com/jsp/jstl/core prefix=”c”%> 静态包含跟动态包含的区别: <%@ include file=”文件名%>,此包含属于静态包含,是指先将文件包含进来然后在进行编译,编译后生成的class文件中,被包含的文件在静态块中。且此种包含不允许带参数。 Jsp常见的动作,调用JavaBean相关: 输入/输出对象 request:表示客户端对网页的请求 response:用于处理Jsp生成的响应,使用Http协议将响应发送给客户端。 out:表示从response中取得的输出流。常用的方法有write(),print(),println()等,用于在页面中输出文本形式的响应内容 作用域通信对象 pageContext:此通信对象的作用域仅在当前页面有效,一旦跳转则不可用 request:此通信对象的作用域针对的同一个客户的请求,如果不是同一个请求则不可以使用 session:此通信对象的作用域适用于一次会话,即打开的同一个浏览器的所有页面都可以适用 application:此通信对象的作用域适用于基于WEB服务器的所有会话,适用于监听器 Servlet对象 page:指向当前Jsp页面经过转译(jsp.java文件),编译(.java文件.class文件)后的对象本身,即编译后的Servlet对象本身 config:是在一个Servlet初始化时,服务器向它传递的初始化信息。初始化信息可以在web.xml中找到。错误对象 execption:表示Jsp页面运行时抛出的异常对象,可以在专门准备的错误处理页面中访问这个异常对象。 Jsp执行过程: jsp文件转译:当客户端请求一个正确的Jsp文件时,将Jsp—>.java文件(即将Jsp文件翻译成相应的Servlet类的源文件)编译:.java文件.class文件,即将Servlet类的源文件进行编译成为.class的Servlet文件。调用Servlet的service()方法响应用户的请求。 描述Jsp和Servlet的区别,共同点,各自的应用范围: 1,从发展上来看,Jsp可以避开Servlet的输出页面的繁琐步骤,它集合了HTML和Servlet的优点。 2,从本质上来说,Jsp是Servlet的扩展,它是Servlet的简易形式。Jsp经过转译之后就成为了类Servlet。 3,从创建方式上来说:Jsp由HTML代码和JSP标签构成,而Servlet则完全是由程序代码构成擅长于流程控制和事务处理的类 4,从使用角度来说:在MVC中,Jsp担任的是VIEW层,侧重于视图,而Servlet则充当的控制层,侧重于控制逻辑。请求转发和重定向 response.sendRedirect():利用response对象向客户端发回一个响应指示其访问其他URL资源,或者说是一个web组件向另一个web组件发送一个新的请求,属于重定向,地址栏有变化。且不可以传递属性request参数,当所有的代码执行完之后才进行重定向。 request.getRequestDispatcher().forword(req,resp):web组件将一个请求转发给另一个web组件,他们始终是同一个请求,在此期间可以传递request属性参数,地址栏没有变化。且一执行到此代码处,后边的将不再执行 JavaBean的组成: 类必须是具体的,公共的。提供无参数的构造方法 提供getter()和setter()方法访问它的属性。版权所有@杨肖飞yangxf159371@126.com 总结一:javaweb课程总结 刚开始学的时候,感觉这两门课程好高大上的样子,因为自从学软件工程这个专业以来,一直都是学的理论性、框架性的东西,就没有接触到编程的实质性的部分,终于开始学编程了,感觉蛮兴奋的,也是精神饱满,信心十足,怀着一腔热血来听课。 由于JAVAWEB和JSP两门课是同时上的,而且每次都是一整上午,上课时间很长,老师一直有条不紊的讲着,虽然时间很长,但是每当大家上完课,心中都是有一种充实的感觉,大家都觉得有所收获,所以也就不曾觉得累了。 JAVAWEB这门课让我认识了以前见所未见闻所未闻的专业术语,Web应用程序的概述。我从中了解到Web应用程序的三层体系结构:表示层、业务层、数据存取层。从而想到了学数据库设计时的数据库设计三大范式,它们同是叙述在编写代码时应做的规划和应遵循的规则,这种规划在以后的学习中时有出现,说明编程并不是一味地进行循环判断、死记硬背,而需要在技术上有所加强、在效率上有所提高。做任何事都是如此,事先必须有目标、有计划,有统筹,这样执行时才不会盲目,才不会事倍功半。学习编程对综合能力都是一种培养。 接下来是JSP知识。要学JSP,就必须会HTML,如果HTML学不通,这对以后的学习都是一个瓶颈。基础一定要打扎实,吃透,否则上层建筑的建起就不会很顺利甚至没法起步。然后是JavaBean。以下是个人对JavaBean的一点学习体会。JavaBean里有set()和get()方法,用这些方法能很容易地传值,逻辑上更标准,代码看起来也更规范。但set()和get()方法只是用来对属性进行操作的,所以如果是进行复杂的逻辑或对数据库进行操作等,那么就不要写成set()和get()方法,只用一个有返回值的方法就足以。这样直观方便,且符合规范。总之,set()和get()方法不要没有效率地滥定义。 接着是Servlet。Servlet是一个用Java编写的应用程序,在服务器上运行,用来处理请求和响应,也可以单独做为一个Web页面。然后讲的是标签,包括自定义标签和JSP标准标签库。用一般的Java代码都几乎能实现它们的功能。它们的好处是提高了代码的重用性。 我们需要配置的坏境有JDK,Tomcat,还要用到Myeclips这一基础的编程工具。在学习JSP之前,由于没有网页编程的基础,便学习了HTML这种文本标记语言,自己试着去做简单的静态网站。后来学做JSP动态网站时,就涉及到了多方面的知识,JSP内部对象及内部对象所涉及的方法,JSP与数据库连接,如何去引用数据库。这门课更是巩固了JAVA这一基础编程语言,要求对JAVA掌握的要透彻,每门语言要学扎实,深入理解,都要花费很大的功夫,不是容易的事情。 Jsp与servlet有一定的区别,Servlet可以看作是HTML的Java代码,而JSP可看作是包含Java代码的HTML。共同点:JSP和Servlet实际上是一回事。JSP页面最终要转换成Servlet,并进行编译,在请求期间执行的实际上是编译后的Servlet。因此,JSP页面不过是编写Servlet的另一种方式。各自应用的范围:Servlet比较适合于做处理任务,如做业务逻辑;JSP适合于表示任务,如网页制作,生成动态网页。 对JAVAWEB和JSP课程的知识就简单介绍到这里,本学期的这两门课程让我对软件工程这门课有了一个全新的认识,我真切的学到了能用的东西,大学里的很多课是浪费时间,而把时间花在学习这两门课上,不会觉得是在虚度光阴,相反,会有一种无比满足与充实的感觉,感谢彭老师半年以来的精心教诲,感谢这两门课给我带来快乐! 总结二:javaweb课程总结 今天老师讲的一定的程度了,发现有一些细节,自己并没有学好,如下是自己认为自己学的模糊的地方。 1.www是(worldwideweb)万维网,www的客户端程序:ie,foxfire.2.什么叫web服务器,就是一段网络程序,让人们通过浏览器可以看到任何主机上的内容(通俗的说法).3.微软开发的搜索引擎?Bing 4.B/S结构的知名缺点是什么? 受浏览器功能的限制。 C/S结构的优点,在实际中还有一部分地方需要它。如:游戏。 5.老师说再过五年就没有操作系统了,搜索引擎是未来发展的趋势。学JAVAweb就是做网站,保证以后20年活得比较滋润。 6.常见的web服务器 weblogic是bea公司 WebSphere是IBM公司 Tomcat是免费的,是Apache 7.建议使用压缩的TOMCAT的安装版,因为现实 中我们是这样用的。 8.安装tomcat的常见问题。 在这里要学习一门语言:批处理编程。打开STARTUP.BAT.1.说catalina_home没有配置 2.一安装完闪就没有了。 解决方法: 1.环境变量设置catalina。还有JAVA_HOME的配置 2.端口被占有的问题。 3.安装多个tomcat,解决方法进入当前的安装目录中双击startup.bat进入。 总结三:javaweb课程总结 我们的JSP课程终于结束。掐指算来,用一个多月的时间。这次的课程和以往的课程有一些不同。一是,需要理解的概念、专业术语很多。比如,JavaWeb里引入了Web体系结构、MVC设计模式等的概念,出现了Servlet、JavaBean、Scriptlet、JSTL等无法替代的术语;二是,这次学习的内容和Internet接轨,十分实用。比如,第四章讲解了JavaMail,这是一个用来发送接收邮件的组件。学完JSP,既复习了Java的知识,又具备了做网站的能力。 回想一下这个阶段的过程。 第一章是对Web应用程序的概述。我从中了解到Web应用程序的三层体系结构:表示层、业务层、数据存取层。从而想到了学数据库设计时的数据库设计三大范式,它们同是叙述在编写代码时应做的规划和应遵循的规则,这种规划在以后的学习中时有出现,说明编程并不是一味地进行循环判断、死记硬背,而需要在技术上有所加强、在效率上有所提高。做任何事都是如此,事先必须有目标、有计划,有统筹,这样执行时才不会盲目,才不会事倍功半。学习编程对综合能力都是一种培养。 接下来学的是JSP知识。要学JSP,就必须会HTML,如果HTML学不通,这对以后的学习都是一个瓶颈。这点我有所体会。因为我对HTML掌握得比较好,在这方面没有遇到什么困难。但如果没掌握好这些知识,加上要学新知识,就会在旧难题的基础上增加新难题,两头招架,实有些吃不消。所以,基础是很重要的,基础一定要打扎实,吃透,否则上层建筑的建起就不会很顺利甚至没法起步。 然后是JavaBean。以下是个人对JavaBean的一点学习体会。JavaBean里有set()和get()方法,用这些方法能很容易地传值,逻辑上更标准,代码看起来也更规范。但set()和get()方法只是用来对属性进行操作的,所以如果是进行复杂的逻辑或对数据库进行操作等,那么就不要写成set()和get()方法,只用一个有返回值的方法就足以。这样直观方便,且符合规范。总之,set()和get()方法不要没有效率地滥定义。 接着是Servlet。一上手,我第一个感觉是,很专业、很难懂。书上介绍了一大堆接口、类、和重写的方法,一时觉得晕头转向。后来用得多、看得多了,Servlet的基本格式也记得差不多,其实也没什么难的。只要记住Servlet是一个用Java编写的应用程序,在服务器上运行,用来处理请求和响应,也可以单独做为一个Web页面,就足够了。 在EL表达式这章,我遇到了一些困难。课后作业题完成得不顺利。但通过后面的学习,我了解到,EL表达式最大的作用是在各种标签里使用。标签以外对变量的引用,用其他方法,比如JSP表达式就能够达到目的。 然后讲的是标签,包括自定义标签和JSP标准标签库。这两章的内容不太常用。因为用一般的Java代码都几乎能实现它们的功能。它们的好处是提高了代码的重用性。标准标签库里有几个比较有用的标签,比如forTokens和setBundle,这两个标签的作用是一般代码实现不了的。 最后一章是MVC设计模式。所谓MVC,就是Model(JavaBean)、View(JSP)、Controller(Servlet),和第一章讲的Web应用程序三层体系结构相呼应。结合起来,可以这样理解。Model是数据存取层,View是表示层,Controller是业务层。用这样的规则编写网站,能做到逻辑分明,代码重用度高,便于维护等。 以上就是对这阶段学习的回顾。 通过学习JSP,我了解了更多的编程概念和理念,更增强了信心,只要有克服困难的勇气和决心,就没有什么难关无法克服。我会抱着十足的勇气和决心向下一个阶段挑战。 从一期学到现在,我对Java有了一个比较具体的认识。 Java的特点是:面向对象、跨平台、可移植。面向对象的涵义是,这种语言可以形象地模拟现实生活中的实物。在面向对象的语言中,“类”是对一组实物的共同特征描述,“对象”是类的实例,同一个类的一些对象具有类所定义的共同特点。面向对象的三大特点是“封装”、“继承”和“多态”。封装的表现有三,一是它把数据成员zǔzhīzà(因为这里被屏蔽,所以用拼音)在一起,形成一个整体;二是它可以隐藏细节,简化操作,比如,声明一个JTextField类的对象,你可以实现这个API中所有的功能,但看不到这个类的代码;你可以直接调用它的setText()、getText()等方法,而不用考虑它具体是怎么实现的。三是它可以保护数据,比如,一个类里有privateintage的属性,产生一个setAge(intageTemp)的方法,在这个方法里对传入的参数进行检验,如果不符合要求,就不对age赋值。 一、基本概念 1.1、WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 Internet上供外界访问的Web资源分为: 1.静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。 2.动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。 静态web资源开发技术:Html 常用动态web资源开发技术:JSP/Servlet、ASP、PHP等 在Java中,动态web资源开发技术统称为Javaweb。1.2、WEB应用程序 WEB应用程序指供浏览器访问的程序,通常也简称为web应用。例如有a.html、b.html„..多个web资源,这多个web资源用于对外提供服务,此时应把这多个web资源放在一个目录中,以组成一个web应用(或web应用程序) 一个web应用由多个静态web资源和动态web资源组成,如:html、css、js文件,Jsp文件、java程序、支持jar包、配置文件等等。 Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射 1.3、WEB发展史 WEB发展的两个阶段:静态、动态 1.4、静态WEB *htm、*html,这些是网页的后缀,如果现在在一个服务器上直接读取这些内容,那么意味着是把这些网页的内容通过网络服务器展现给用户。整个静态WEB操作的过程图如下: 在静态WEB程序中,客户端使用WEB浏览器(IE、FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需要得到哪个页面,所有的请求交给WEB服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过WEB服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。 静态WEB中存在以下几个缺点: 1、Web页面中的内容无法动态更新,所有的用户每时每刻看见的内容和最终效果都是一样的。 为了可以让静态的WEB的显示更加好看,可以加入了JavaScript以完成一些页面上的显示特效,但是这些特效都是在客户端上借助于浏览器展现给用户的,所以在服务器上本身并没有任何的变化。 实现静态WEB客户端动态效果的手段: JavaScript VBScript 在实际的开发中JavaScript使用得最多。 2、静态WEB无法连接数据库,无法实现和用户的交互。 使用数据库保存数据是现在大多数系统的选择,因为数据库中可以方便地管理数据,增删改查操作可以使用标准的SQL语句完成。1.5、动态WEB 所谓的动态不是指页面会动,主要的特性的是:“WEB的页面展示效果因时因人而变”,而且动态WEB具有交互性,WEB的页面的内容可以动态更新。整个动态WEB操作的过程图如下: 动态WEB中,程序依然使用客户端和服务端,客户端依然使用浏览器(IE、FireFox等),通过网络(Network)连接到服务器上,使用HTTP协议发起请求(Request),现在的所有请求都先经过一个WEB Server Plugin(服务器插件)来处理,此插件用于区分是请求的是静态资源(*.htm或者是*.htm)还是动态资源。 如果WEB Server Plugin发现客户端请求的是静态资源(*.htm或者是*.htm),则将请求直接转交给WEB服务器,之后WEB服务器从文件系统中取出内容,发送回客户端浏览器进行解析执行。 如果WEB Server Plugin发现客户端请求的是动态资源(*.jsp、*.asp/*.aspx、*.php),则先将请求转交给WEB Container(WEB容器),在WEB Container中连接数据库,从数据库中取出数据等一系列操作后动态拼凑页面的展示内容,拼凑页面的展示内容后,把所有的展示内容交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器进行解析执行。1.6、动态WEB应用的实现手段 动态WEB现在的实现手段非常多,较为常见的有以下几种: Microsoft ASP、ASP.NET PHP JAVA Servlet/JSP 1、Microsoft ASP、ASP.NET 微软公司动态WEB开发是比较早的,而且最早在国内最流行的是ASP。ASP就是在HTML语言之中增加了VB脚本,但是标准的开发应用应该是使用ASP+COM,但是实际情况来看,在开发ASP的时候基本上都在一个页面中写上成百上千的代码,页面代码极其混乱。 ASP本身有开发平台的限制:Windows+IIS+SQL Server/Access,ASP只能运行在Windows操作系统上,ASP现在基本上已经淘汰,现在基本上都是使用ASP.NET进行开发,ASP.NET在性能有了很大的改善,而且开发迅速,但是依然受限于平台。ASP.NET中主要是使用C#语言。2.PHP PHP开发速度很快,功能强大,跨平台(平台指的就是运行的操作系统),而且代码也简单。3.Servlet/JSP 这是SUN公司(SUN现在已经被Oracle公司收购)主推的B/S架构的实现语言,是基于JAVA语言发展起来的,因为JAVA语言足够简单,而且很干净。 Servlet/JSP技术的性能也是非常高的,不受平台的限制,各个平台基本上都可以使用。而且在运行中是使用多线程的处理方式,所以性能非常高。 SUN公司最早推出的WEB技术推出的是Servlet程序,Servlet程序本身使用的时候有一些问题,所有的程序是采用JAVA代码+HTML的方式编写的,即,要使用JAVA输出语句,一行一行地输出所有的HTML代码,之后,SUN公司受到了ASP的启发,发展出了JSP(Java Server Page),JSP某些代码的编写效果与ASP是非常相似的。这样可以很方便地使一些ASP程序员转向JSP的学习,加大市场的竞争力度。 二、WEB服务器 2.1、WEB服务器简介 1、Web服务器是指驻留于因特网上某种类型计算机的程序,是可以向发出请求的浏览器提供文档的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。 2、服务器是一种被动程序:只有当Internet上运行在其他计算机中的浏览器发出请求时,服务器才会响应。 2.2、常见的Web服务器介绍 1、WebLogic WebLogic是美国bea公司出品的一个application server。BEA WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。是目前应用最广泛的Web服务器,支持J2EE规范,而且不断的完善以适应新的开发要求,启动界面如图 2、WebSphere WebSphere Application Server 是一种功能完善、开放的Web应用程序服务器,是IBM公司电子商务计划的核心部分,它是基于 Java 的应用环境,用于建立、部署和管理 Internet 和 Intranet Web 应用程序。这一整套产品进行了扩展,以适应 Web应用程序服务器的需要,范围从简单到高级直到企业级。启动界面如图: 3、Tomcat TomcatTomcat是一个实现了JAVA EE标准的最小的WEB服务器,是Apache 软件基金会的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且开源免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。学习JavaWeb开发一般都使用Tomcat服务器,该服务器支持全部JSP以及Servlet规范,启动界面如图: 4、IIS Microsoft的Web服务器产品为Internet Information Services(IIS),IIS 是允许在公共Intranet或Internet上发布信息的Web服务器。ⅡS是目前最流行的Web服务器产品之一,很多著名的网站都是建立在ⅡS的平台上。IIS提供了一个图形界面的管理工具,称为Internet信息服务管理器,可用于监视配置和控制Internet服务。 IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。 学习web开发,需要先安装一台web服务器,然后再在web服务器中开发相应的web资源,供用户使用浏览器访问。 三、搭建JavaWeb应用开发环境——Tomcat服务器 3.1、疑问:学习web开发,为什么必须要先装一个WEB服务器? 在本地计算机上随便创建一个web页面,用户是无法访问到的,但是如果启动tomcat服务器,把web页面放在tomcat服务器中,用户就可以访问了。这说明什么问题? 1、不管什么web资源,想被远程计算机访问,都必须有一个与之对应的网络通信程序,当用户来访问时,这个网络通信程序读取web资源数据,并把数据发送给来访者。 2、WEB服务器就是这样一个程序,它用于完成底层网络通迅。使用这些服务器,We应用的开发者只需要关注web资源怎么编写,而不需要关心资源如何发送到客户端手中,从而极大的减轻了开发者的开发工作量。3.2、下载和安装Tomcat服务器 Tomcat官方站点:http://jakarta.apache.org 下载Tomcat安装程序包:http://tomcat.apache.org/ 点击【Download】跳转到如下图所示的下载页面 1.tar.gz文件是Linux操作系统下的安装版本 2.exe文件是Windows系统下的安装版本 3.zip文件是Windows系统下的压缩版本 下载完成后,得到的是一个压缩包,将压缩包解压就可以完成Tomcat服务器的安装 将压缩包解压后,得到的就是如下图所示的文件夹,这样就完成了Tomcat服务器的安装。 3.3、启动和测试Tomcat服务器 启动Tomcat服务器 双击 bin 目录下的 startup.bat 文件启动Tomcat服务器 测试Tomcat服务器 打开浏览器,输入http://localhost:8080/,能显示如下界面代表安装成功。 3.4、Tomcat启动常见问题 导致Tomcat服务器无法正常启动的原因一般来说就是如下的两个: 1、JAVA_HOME环境变量设置问题 要想双击bin目录下的startup.bat文件启动Tomcat服务器,首先要做的就是在windows中设置JAVA_HOME环境变量,因为Tomcat服务器的启动需要用到这个JAVA_HOME环境变量,如果windows中不存在JAVA_HOME环境变量,则Tomcat服务器是无法启动的。 在Window中配置JAVA_HOME变量 操作步骤(win7系统):计算机→右键“属性”→高级系统设置→高级→环境变量,如下图所示: 点击系统变量下面的“【新建】”,弹出一个新建系统变量对话框,首先在变量名写上JAVA_HOME,顾名思义,JAVA_HOME的含义就是JDK的安装路径,然后在变量值写JDK的安装路径,如这里设置的变量值是“D:Program Files(x86)Javajdk1.7.0”,设置好变量值之后,点击【确定】按钮,JAVA_HOME环境变量就设置完成,如下图所示:系统变量中多了一个“JAVA_HOME”变量。 正常来说,学习Java开发的第一步就是配置Path环境变量,比较好的配置方式是先配置JAVA_HOME环境变量,然后在Path变量中使用“%JAVA_HOME%”引用JAVA_HOME变量的值。 所以这个JAVA_HOME环境变量在Window中一般都是已经配置好了的,如果忘记配置JAVA_HOME环境变量,那么可以使用上述的方式配置 2、端口占用问题 因为Tomcat服务器启动时是需要默认是使用8080端口的,如果这个8080端口被别的应用程序占用了,那么Tomcat服务器就无法正常启动,看到的现象就是“Tomcat服务器启动界面会打印出异常错误信息,然后就自动关闭了”,如下图所示: 由于这个窗口从启动到关闭的时间非常短,我们很难通过这个窗口看到Tomcat启动时的报错异常信息,因此我们一般只能通过Tomcat服务器的记录的log(日志)信息去查看Tomcat服务器的运行情况。 在Tomcat服务器的根目录下有一个logs文件夹,logs文件夹存放Tomcat 的日志文件,打开logs文件夹,可以看到里面的log文件,其中有一个以“catalina.yyyy-MM-dd.log”形式命名的log文件,例如“catalina.2014-05-17.log”日志文件就是记录Tomcat服务器2014-05-17这一天的运行情况。 打开catalina.2014-05-17.log文件,看看里面的日志记录信息,日志信息里面清楚的记录了Tomcat服务器的运行情况,如果因为8080端口被占用而无法正常启动,就会记录如上图所示的异常信息,通过查看异常信息,我们就可知道Tomcat服务器为什么不能够正常启动了! 总结:当Tomcat服务器无法正常启动时,首先检查是否配置了JAVA_HOME环境变量,然后再检查Tomcat服务器启动时的端口是否被别的应用程序占用了。 Java Web试题 JAVA WEB部分: 1.基于HTTP协议的Servlet通常继承__C______, 也可以继承__B______。这些类型都实现了接口___A_____。 A.javax.servlet.Servlet B.javax.servlet.GenericServlet C.javax.servlet.http.HttpServlet 2.我们实现的基于HTTP协议的Servlet的服务方法签名正确的有__ BCD_____________。 A.public void doGet(ServletRequest req, ServletResponse res)throws IOException, ServletException B.public void doPost(HttpServletRequest req, HttpServletResponse res)throws IOException, ServletException C.public void service(HttpServletRequest req, HttpServletResponse res)throws IOException, ServletException D.public void service(ServletRequest req, ServletResponse res)throws IOException, ServletException 重写服务方法,一般是以下两种方式: doGet(HttpServletRequest req,HttpServletResponse res)doPost(HttpServletRequest req,HttpServletResqonse res) HttpServlet继承自GenericServlet,其中的service方法自动实现; GenericServlet的调用方法: 容器 -->service(ServletRequest req,ServletResponse res)-->service(HttpServletRequest req,HttpServletResponse res)-->METHOD=“GET”-->doGet(HttpServletRequest req,HttpServletResponse res)-->METHOD=“POST”-->doPost(HttpServletRequest req,HttpServletResponse res) API中有D这个方法 3.在Servlet中要输出内容,使用HttpServletResponse的方法_setContentType 设置内容,对于文本类型调用方法__ getWriter _获得一个___ PrintWriter ___的输出流,对于二进制类型调用_ getOutputStream 获得_ ServeltOutputStream _的输出流。调用HttpServletRequest的方法_ getParameter 解析有名参数,调用_ getInputStream 获得一个_ ServletInputStream _的输入流。在Servlet中也可以调用_ ServletContext 和_ HttpServletRequest _的方法_ getRequestDispatcher __获得__ RequestDispatcher __, 将请求的处理权交给一个新的资源。A.ServletInputStream B.ServletContext C.HttpServletRequest D.setContentType E.getInputStream F.getOutputStream G.getRequestDispatcher H.RequestDispatcher I.getParameter J.ServeltOutputStream K.getWriter L.PrintWriter 4.控制一个Servlet的生命周期的方法有__C______, _____B___和____A____。其中 ___C_____在所有的请求到来之前调用,____A____在撤消应用或关闭web container时调用。Servlet通常只有一个实例,被所有的访问者共享,因此要注意资源的同步。A.destroy B.service C.init 5.以下是部署在主机”%> C. D. E.<% int i = 10;%> F.<%!int i = 10;%> G.< %@taglib uri=”http://java.sun.com/jstl/core” prefix=”c”%> H.<%=new java.util.Date()%> I. 11.在directive page中,__B______属性可反复出现,___AC_____属性的却省值为true, ____E____属性的值指向处理异常的页面,______D__表示激活EL。A.autoFlush B.import C.session D.isELIgnored=false E.errorPage jsp的page指令(directive) jsp的page指令(directive)影响着由JSP页面生成的Servlet的整体结构!page指令的功能包括(1)类的导入(2)Servlet父类的制定(3)内容类型的设置(4)页面会话的设置(5)页面缓冲的设置 (6)错误页面的设置(7)控制线程行为 page属性(attribute)值的两边的双引号也可以用单引号代替,单引号不能省略,若属性值本身含有引号,则在它们之前加上反斜杠来转义。 page 的几个重要的指令:1.import 唯一的一个允许多次出现的attirbute.默认情况下有以下几个是自动导入的包,java.lang.*;java.servelt.*;javax.servlet.jsp.*;javax.servlet.http.*!2.pageEncoding用来单独设置页面的字符集。%@page pageEncoding=“GB2312”% 3.contentType设置响应报头标明发送到客户端的MIME类型和页面字符集!<%@ page contentType=“text/html;charset=gb2312”%> 4.session 属性控制页面的会话特性!%@page session=“true|false”% 默认值为true.5.buffer 和 autoFlush 属性 buffer 设置缓冲区的大小 <%@ page buffer=“sizekb|none”%> autoFlush 当缓冲区满后自动清空!%@page autoFlush=“true|false”% 默认值为true,为false时会抛出一个异常。 6.errorPage 和isErrorPage(attribute)<%@page errorPage=“RelativeURL ”%>指定一个页面处理当前页面抛出但未捕获的异常对象。 %@page isErrorPage=“true|false”% 表明当前页面是否可以作为其他jsp页面的错误页面。可以将此页面放在WEB-INF目录中,有助于提高程序的安全性。 1、<%@ page buffer=“25kb” autoFlush=“true” %> 2、buffer=“none | 8kb | sizekb” buffer的大小被out对象用于处理执行后的JSP对客户浏览器的输出。缺省值是8kb 3、autoFlush=“true | false” 设置如果buffer溢出,是否需要强制输出,如果其值被定义为true(缺省值),输出正常,如果它被设置为false,如果这个buffer溢出,就会导致一个意外错误的发生.如果你把buffer设置为none,那么你就不能把autoFlush设置为false.12.有一个JavaBean com.briup.Student, 在JSP中用action在session作用域里创建一个对象hellen的语句是___ 什么是JavaBean?(参见文档) 13.以下_ABCD_______是JSP中正确的注释: A.<%--comments--%> 真正的注释 B.<% //comments %> C. 会写在页面当中 D.<%!/* comments */ %> JAVA中的单行和多行注释 14.以下__AB______是错误的: A.<%!int i = 10;int j = 10;i += j;%> B.<% int getHash(String str){ return str.hashCode();} %> 声明脚本 C.<%!class A { void print(){System.out.println(“in A”);}} %> 15.在JSP中有很多隐含变量,request的类型是C_javax.servlet.http.HttpServletRequest______, response的类型是_I__javax.servlet.http.HttpServletResponse__, page的类型是__E__javax.servelet.jsp.JspPage_,pageContext的类型是__B__javax.servlet.jsp.PageContext____, session的类型是_D__javax.servlet.http.HttpSession_____, application的类型是____G__ javax.servlet.ServletContext__, config的类型是__F_javax.servlet.ServletConfig_, out的类型是_H__ javax.servlet.jsp.JspWriter_____, exception的类型是___A__java.lang.Throwable___。A.java.lang.Throwable B.javax.servlet.jsp.PageContext C.javax.servlet.http.HttpServletRequest D.javax.servlet.http.HttpSession E.javax.servelet.jsp.JspPage F.javax.servlet.ServletConfig G.javax.servlet.ServletContext H.javax.servlet.jsp.JspWriter I.javax.servlet.http.HttpServletResponse 参见PDF97页 16.JSP在处理客户请求前会被编译成servlet, JSP中declaration中定义的变量和方法在运行时成为对应servlet的___B_____变量和方法;scripting会成为服务方法____C____的语句。JSP的生命周期受到____A____,___C_____和___D_____的控制。A.jspInit B.member C._jspService D.jspDestroy 调出一个编译后的JSP文件给学生看 D:JAVATomcat-5.5.25workCatalinalocalhostRunCommunityorgapachejsppages 17.在web应用webdev的WEB-INF的目录下有一个标签库描述文件sample.tld, 其内容部分如下: 在hello.jsp中要使用标签hello, 因此必须先引入该标签库,语句是__<%@taglib uri=”/WEB-INF/sample.tld” prefix=”s”%>_____。要用hello标签在页面上给”world“打招呼的语句是___ 18.在web应用webdev的WEB-INF/tags目录下放置了一些标签文件,用前缀”me”引入这些标签到一个jsp的 directive taglib的表达式是___<%@taglib tagdir=”/WEB-INF/tags” prefix=”me”%>__。 19.一个没有body的标签其tag handler要实现接口__C______;如果某个标签有body, 但标签不与body交互,tag handler要实现接口___E_____, 如果要与body交互,tag handler要实现接口____D____。通常前两种情况的tag handler会继承___A_____, 最后一种情况tag handler会继承_____B___。 A.javax.servlet.jsp.tagext.TagSupport B.javax.servlet.jsp.tagext.BodyTagSupport C.javax.servlet.jsp.tagext.Tag D.javax.servlet.jsp.tagext.BodyTag E.javax.servlet.jsp.tagext.IterationTag 20.在EL中以下____B____可以获得requestURI: A.${requestScope.request.requestURI} B.${pageContext.request.requestURI} C.${requestScope.requestURI} 21.EL中可使用一些隐含对象,通过____C____可以访问request中的属性(attriubte), 通过___A_____可以访问session中的属性, 通过___B_____可以访问application中的属性, 通过___D_____可以访问浏览器输入的参数,通过____G____可以访问请求头中的参数,通过____E____可以访问web应用的参数,通过____F____可以访问cookie。A.sessionScope B.applicationScope C.requestScope D.param E.initParam F.cookie G.header 22.在EL中能够访问的函数(function)必须是_____A___。 A.public static B.protected C.protected static D.public static void F.protected static void 23.在EL中访问JavaBean Student的对象smallTank的属性name正确的是__ABC______。A.${smallTank.name} B.${smallTank[„name‟]} C.${smallTank[“name”]} D.${smallTank(„name‟)} SESSION AAA=”aa” APPLICATION(aa=”hhhh”) applicationScope['aa'] 此种情况只能用方括号 24.Struts提供MVC的一个实现,是Java Web应用的一个框架(Framework).它主要采用了____D____模式。浏览器请求被控制器servlet ___A_____截取,控制器将浏览器表单的输入封装到____F____类型的JavaBean对象中,如果应用需要作合法性检测,该类型的____G____方法会被调用,该方法的返回类型是_____B___。如果合法性检测正确,控制器会将调用类型为____H____对象的方法__E______处理请求,该方法返回类型为____C____。A.org.apache.struts.action.ActionServlet B.org.apache.struts.action.ActionErrors C.org.apache.struts.action.ActionForward D.command E.execute F.org.apache.struts.action.ActionForm G.validate H.org.apache.struts.action.Action 25.使用Tomcat,我们通常会设置环境变量_C_ CATALINA_HOME_指向安装目录;web应用的却省部署目录在安装目录下的___A__webapps___子目录;如果有多个web应用共享的包如数据库驱动程序,我们应该将其放置在安装目录的__D__common/lib__子目录;Tomcat的主要配置文件是安装目录下__B_conf _子目录下的___F__server.xml___;Tomcat 5的应用相关的配置文件放在安装目录下___E__conf/Catalina/ B.conf C.CATALINA_HOME D.common/lib E.conf/Catalina/ 文档为doc格式 ewebeditor漏洞利用总结 先从最基本的记录起!通常入侵ewebeditor编辑器的步骤如下:1、首先访问默认管理页看是否存在。 默认管理页地址2.80以前为 ewebeditor/admin_login.as...... 生态修复总结 一、概述 1生态学及生态修复概念 生态学是研究生物体与其周围环境(包括非生物环境和生物环境)相互关系的科学。目前已经发展为“研究生物与其环境之间的相互关系...... **同志在深入学习贯彻科学发展观动员会上要求,公安机关学习贯彻科学发展观要结合实际工作、解决实际问题。据此,笔者对我市城区社区安全防范工作进行了调研。对当前我市城区社...... Fckeditor漏洞利用总结查看编辑器版本FCKeditor/_whatsnew.html——————————————————————————————————————————————————...... PHP网站漏洞的相关总结 NB联盟-zwell 从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方面,小竹是专家,我没发言权.然而在PHP方面来看,也同样存...... 土壤污染修复 第一章土壤及其基本性质 1.土壤:是指地球陆地表面能生长绿色植物的疏松多孔结构表层,具有不断地、同时地为植物生长提供并协调营养条件和环境条件的能力。 2. 土...... 宝塔山旅游观光车分公司 2015年工作总结 2015年,我公司在延安旅游集团公司的正确领导下,在宝塔山旅游分公司的大力支持下,坚持“安全第一,优质服务”,强化内部管理,狠抓安全生...... 2014年度中职骨干教师国家级汽车车身修复专业培训班培训总结(第一期) 培 训 总 结 内蒙古省扎兰屯林业学校 王健 2015年4月至6月,我有幸到山东-巴伐利亚师资培训中心参加了中......
运营中心联系方式 第二篇:javaWeb总结+小结
第三篇:javaweb学习课程总结
第四篇:JavaWeb学习总结
第五篇:Javaweb期末试卷总结版2
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。 ewebeditor漏洞利用总结
生态修复总结
社区安全防范漏洞防范措施
Fckeditor漏洞利用总结(五篇范文)
PHP网站漏洞的相关总结
土壤污染修复资料总结
2014年总结 (修复的)(本站推荐)
车身修复培训总结