dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>java>jsp>文章内容
JSP安全编程实例浅析
来源:未知     作者:    
   Server Page(JSP)作为建立动态网页的技术正在不断升温。JSP和ASP、、工作机制不太一样。一般说来,JSP页面在执行时是编译式,而不是解释式的。首次调用JSP文件其实是执行一个编译为的过程。当浏览器向服务器请求这一个JSP文件的时候,服务器将检查自上次编译后文件是否有改变,如果没有改变,就直接执行,而不用再重新编译,这样,效率便得到了明显提高。

  今天我将和大家一起从脚本编程的角度看JSP的安全,那些诸如源码暴露类的安全隐患就不在这篇文章讨论范围之内了。写这篇文章的主要目的是给初学编程的朋友们提个醒,从一开始就要培养安全编程的意识,不要犯不该犯的错误,避免可以避免的损失。另外,我也是初学者,如有错误或其它意见请发帖赐教。

  一、认证不严——低级失误

  在溢洋v1.12 修正版中,

  user_manager.是用户管理的页面,作者知道它的敏感性,加上了一把锁:

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

  如果要查看、修改某用户的信息,就要用modifyuser_manager.这个文件。管理员提交
http://www.somesite.com/yyforum/modifyuser_manager.?modifyid=51
就是查看、修改ID为51的用户的资料(管理员默认的用户ID为51)。但是,如此重要的文件竟缺乏认证,普通用户(包括游客)也直接提交上述请求也可以对其一览无余(密码也是明文存储、显示的)。modifyuser_manage.jsp同样是门户大开,直到恶意用户把数据更新的操作执行完毕,重定向到user_manager.的时候,他才会看见那个姗姗来迟的显示错误的页面。显然,只锁一扇门是远远不够的,编程的时候一定要不厌其烦地为每一个该加身份认证的地方加上身份认证。

  二、守好Bean的入口

  JSP组件技术的核心是被称为bean的java组件。在程序中可把逻辑控制、操作放在s组件中,然后在JSP文件中调用它,这样可增加程序的清晰度及程序的可重用性。和传统的ASP或页面相比,页面是非常简洁的,因为许多动态页面处理过程可以封装到Bean中。

  要改变Bean,要用到“<:setProperty>”标记。

  下面的代码是假想的某电子购物系统的源码的一部分,这个文件是用来显示用户的购物框中的信息的,而checkout.是用来结帐的。

<:useBean id="myBasket" class="BasketBean">
<:setProperty name="myBasket" property="*"/>
<:useBean>
<html>
<head><title>Your Basket</title></head>
<body>
<p>
You have added the item
<::getProperty name="myBasket" property="newItem"/>
to your basket.
<br/>
Your total is $
<::getProperty name="myBasket" property="balance"/>
Proceed to <a href="checkout.">checkout</a>

  注意到property="*"了吗?这表明用户在可见的页面中输入的,或是直接通过Query String提交的全部变量的值,将存储到匹配的bean中。

  一般,用户是这样提交请求的:

http://www.somesite.com /addToBasket.?newItem=ITEM0105342

  但是不守规矩的用户呢?他们可能会提交:

http://www.somesite.com /addToBasket.?newItem=ITEM0105342&balance=0


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

  这与中全局变量导致的安全问题如出一辙。由此可见:“property="*"”一定要慎用!

[1]  

 

 

上一篇:利用JSP 2.0开发Web应用程序   下一篇:Taglib原理和实现之循环的Tag
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·JSP入门实例教程
·什么是Servlet
·JSP常用内置对象使用说明
·JSP自定义标签由浅到深详细讲解
·JSP自定义标签由浅到深详细讲解
·Java Servlet技术
·Javax.servlet API的特征
·一个简单的jsp注册页面
·JSTL操作数据库示例
·JSP入门实例教程13-MVC模式
·JSP入门实例教程12-jstl处理数
·JSP入门实例教程11-jstl处理xml
  相关文章
·利用JSP 2.0开发Web应用程序
·Taglib原理和实现之循环的Tag
·用缓冲技术提高JSP程序的性能和
·JSP和Struts解决用户退出问题
·JSP/Servlet构建三层管理信息系
·Taglib 原理和实现之嵌套和属性
·JSP/Servlet的重定向技术综述
·Taglib 原理和实现之支持El表达
·JSP报表打印的一种简单解决方案
·Taglib 原理和实现之什么是Tagli
·入侵基于JSP+Tomcat的Web网站实
·深入剖析JSP和Servlet对中文的处
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763