腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
LeoXu的博客
专栏成员
举报
81
文章
97687
阅读量
13
订阅数
订阅专栏
申请加入专栏
全部文章(81)
其他(38)
java(11)
android(8)
xml(7)
html(6)
人工智能(5)
编程算法(5)
api(4)
容器(4)
tomcat(3)
apache(3)
sql(2)
mvc(2)
eclipse(2)
maven(2)
linux(2)
存储(2)
html5(2)
windows(2)
nat(2)
区块链(1)
xcode(1)
go(1)
servlet(1)
jsp(1)
数据库(1)
打包(1)
ide(1)
jar(1)
spring(1)
渲染(1)
游戏(1)
开源(1)
缓存(1)
spark(1)
jdk(1)
jvm(1)
安全(1)
header(1)
push(1)
window(1)
对象(1)
工作(1)
设计(1)
搜索(1)
算法(1)
装饰器(1)
搜索文章
搜索
搜索
关闭
[翻译]使用 Velocity 构建一个稳定安全的Web应用
安全
html
<p> draft document -- 2003年6月11日 </p> <p> 作为一名web开发者,任何时候当你构建一个Web应用时,有责任确保你的应用程序能够做什么和什么是应该做的:在发生错误的时候优雅的处理错误;让用户获取不到他们不应该查看的数据;防止恶意用户对应用程序进行的干扰操作。 </p> <p> 然而,详细的讨论如何去构建一个稳定的web应用程序是一个太过复杂的主题,这一篇短文设计的是构建基于Velocity的web应用程序常见的几个问题。短文是从一个开发者的角度写起的,他需要同大量的html模板开发人员和最终用户接触。我们鼓励读者发表自己的意见,其他问题和相关的设计建议请致信 Velocity 用户列表,或者直接联系作者,Will Glass-Husain。 </p> <p> <b>Velocity 如何帮助开发者创建一个稳定的App</b> </p> <p> 通常,Velocity 是一个html设计师容易学会,并且不会难用的web模板工具。这一点基于如下的几个要素: </p> <p> <b>Velocity 模板语言(VTL)是简单的。</b> 使用几个简单的指令,外加应用本身定义的引用,需要学习的东西少(也不怎么凌乱)。 </p> <p> <b><em>页面文件中不存储非展示用的信息。</em></b> 对比JSP文件,它常常需要带上一个页面头文件。如果一个不懂技术的web设计师去掉了这个头部,那么这个JSP页面就不起作用了。在一个Velocity模板中这样的头部或者其他技术信息是不需要的。 </p> <p> <b><em>在一个web页面中没有Java代码。</em></b> 这样就消除了一些共有的错误和混乱设计,同时让恶意的页面编辑者去调用不必要的Java代码变得困难。 </p> <p> <b><em>一个方法的异常不会阻塞一个页面的创建。</em></b> 使用MethodExceptionEventHandler,一个方法异常可以被获取和记录日志。 </p> <p> <b><em>一个无效的引用不会阻塞一个页面的创建。</em></b> 模板指令中无效的引用通常被忽略不计。页面中一个无效的引用将会简单的把其引用参考字打印出来。(比如:$foo)。 </p> <p> 基于如上的原因,大部分Velocity开发者将会发现:没有什么离奇的现象或者问题,页面以一种直接的方式被渲染。 </p> <p> <b></b> </p> <p> <b>基于Velocity稳定和安全性的具体问题</b> </p> <p> 考虑安全和稳定要素时,你需要意识到基于Velocity的web应用程序的几个特性。 </p> <p> <b><em>Velocity 是一个模板工具, 而不是一个框架。</em></b> 它不解决任何像认证、访问控制、会话状态或者数据持久化这样的问题。 </p> <p> <b><em>VTL方法调用实际上是Java的方法调用。</em></b> 这意味着一个糟糕的velocity应用程序设计使得模板设计者改变系统的状态,直接执行SQL查询或者随意的实例化Java类。潜在的安全威胁将在下面被详细提到。 </p> <p> <b><em>VTL引用具有Java类型。</em></b>尽管对被模板编辑者是不可见的,每一个引用还是一个具有特定类型的Java对象。如果 $apple 是一个 integer 的 “1”, $orange是一个String 的“1”,$banana是一个 double 的 “1.0”,那么根据VTL这些对象没有一个是==(对等)的。典型的非技术html模板设计者可能会对此感到迷惑。(事实上,如果对象不是同一个类型的,会有对它们字符串值的比较。因此, 在VTL中, $apple和 $orange现在是对等的了。) </p> <p> <b></b> </p> <p> <b>在构建安全,稳定的Velocity Web应用程序中的最佳实践。</b> </p> <p> 如下所列是能够帮助你构建一个稳定的Velocity Web应用程序的最佳实践。它们包括: </p> <blockquote> <p> <i>在上下文环境context中审查所有不必要的方法。</i> </p> </blockquote> <blockquote> <p> <i>编码HTML特殊字符,以避免交叉脚本漏洞。(cross-scripting)</i> </p> </blockquote> <blockquote> <p> <i>使用最新且做了合适设置的app服务器。</i> </p> </blockquote> <blockquote> <p> <i>进行适合生产中使用的Velocity配置</i> </p> </blockquote> <p> <b><i>在上下文环境context中审查所
LeoXu
2018-08-15
515
0
没有更多了
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
立即查看
Python精品学习库
代码在线跑,知识轻松学
立即查看
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
立即体验
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
立即查看
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档