我爱Aspx >> C#.Net >> JSP应用程序开发中安全问题的实例解析_JSP技巧</tt><hr/></p>
<!-- 下面加上其他HTML代码 -->
由于要列举出所有不合法的字符比较困难,所以更安全的方法是进行正向过滤,即除了那些确实允许出现的字符之外(例如[A-Za-z0-9]),丢弃(或者转换)所有其他字符。
八、关于JavaBean的说明
JSP按照JavaBean规范描述的一系列约定,在JSP页面中快速、方便地访问可重用的组件(Java对象)。每个JavaBean组件封装了一些可以不依赖于调用环境而独立使用的数据和功能。Bean包含数据成员(属性),并通过Get和Set方法实现访问这些属性的标准API。
为快速初始化指定Bean的所有属性,JSP提供了一种快捷方式,即在查询字符串中提供name=value对,并让它匹配目标属性的名字。考虑下面这个使用Bean的例子(以XML格式显示):
<jsp:useBean id="myBasket"
class="BasketBean">
<jsp:setProperty name="myBasket"
property="*"/> <jsp:useBean>
<html>
<head><title>你的购物篮</title></head>
<body> <p> 你已经把商品:
<jsp::getProperty name="myBasket"
property="newItem"/> 加入到购物篮
<br/> 金额是$ <jsp::getProperty
name="myBasket" property="balance"/>
准备 <a href="checkout.jsp">付款</a>
注意在setProperty方法调用中使用的通配符号“*”。这个符号指示JSP设置查询字符串中指定的所有属性的值。按照本意,这个脚本的调用方式如下:
http://server/addToBasket.jsp?newItem=ITEM0105342
正常情况下,HTML表单构造的查询字符串就是这种形式。但问题在于,没有任何东西能够防止用户设置balance属性:
http://server/addToBasket.jsp?
newItem=ITEM0105342&balance=0
处理页面的标记时,JSP容器会把这个参数映射到Bean中具有同样名字的balance属性,并尝试把该属性设置为0。
为避免出现这种问题,JSP开发者必须在Bean的Set和Get方法中实现某种安全措施(Bean必须对属性进行强制的访问控制),同时,在使用的通配符时也应该小心谨慎。
九、实现上的漏洞与源代码安全
无论是哪一种JSP实现,在一定的阶段,它们的某些版本都会出现给系统带来危险的安全隐患,即使JSP开发者遵从了安全编程惯例也无济于事。例如,在Allaire的JRun的一个版本中,如果请求URL包含字符串“.jsp%00”作为JSP脚本扩展名的一部分,服务器不会忽略null字节,它会把页面视为一个静态的非JSP页面之类的东西。
Ҷƪл˵?
Delphi编写网络程序的安全措施_D..[04-28]
增强MIDAS的安全性_Delphi教程[04-28]
关于MIDAS的安全问题的解决方案_..[04-28]
集合类:VBA集合对象的安全包装_..[04-28]
PerlCGI程式写作常问问题集(4)安..[04-28]
学习一下.net framework 中有关安..[04-28]
ASP.NET基于角色的窗体安全认证机..[04-28]
ASP.NET应用程序安全性问题_ASP...[04-28]
web.config点滴:更改login控件对..[04-28]
ASP.NET2.0数据库之SQL Server安..[04-28]