2009-12-21 21:50| 发布者: admin| 查看: 65| 评论: 0|原作者: 云忆
你提交的消息是:
你已经把商品:property="newItem"/> 加入到购物篮 金额是$ name="myBasket" property="balance"/> 准备 付款 注意在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页面之类的东西。 这样,服务器会请求操作系统打开该页面,而这时null字节却被忽略,结果提供给用户的是JSP页面的源代码而不是页面的执行结果。 类似地,Tomcat的一个版本也有一个安全隐患。只要请求类如下面的格式,它会让攻击者看到JSP页面的源代码:http://server/page.js%2570 这里的骗局在于,%25是URL编码的“%”,而70是“p”的十六进制值。Web服务器不会调用JSP处理器(因为URL没有以“.jsp”结尾),但静态文件处理器会设法把URL映射到正确的文件名字(再一次解码URL)。 另外,许多Web服务器和JSP实现都带有示范脚本,这些示范脚本常常包含安全隐患。在把服务器部署到一个不无恶意的环境(即Internet)之前,禁止对所有这些脚本的访问有利于安全。 简而言之,JSP开发者应该清楚:在自己正在开发的平台上,当前有哪些安全隐患。订阅BUGTRAQ和所有供应商提供的邮件列表是跟踪这类信息的好方法。 结束语 JSP和任何其他强大的技术一样。如果要保证被部署系统的安全和可靠,应用JSP时必须小心谨慎。在这篇文章中,我们简要地讨论了JSP脚本中常常出现的代码和配置级安全问题,提出了降低由此带来的安全风险的建议。
评论
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 17:34 , Processed in 0.149256 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.