与多数分布式应用程序一样,为确保安全,Web应用程序必须解决一个根本的问题。由于应用程序无法控制客户端,用户几乎可向服务器端应用程序提交任意输入。应用程序必须假设所有输入的信息都是恶意的输入,并必须采取措施确保攻击者无法使用专门设计的输入破坏应用程序,干扰其逻辑结构与行为,并最终达到非法访问其数据和功能的目的。
这个核心问题表现在许多方面。
用户可干预客户端与服务器间传送的所有数据,包括请求参数、cookie和HTTP信息头。可轻易避开客户端执行的任何安全控件,如输入确认验证。
用户可按任何顺序发送请求,并可在应用程序要求之外的不同阶段不止一次提交或根本不提交参数。用户的操作可能与开发人员对用户和应用程序交互方式做出的任何假设完全不同。
用户并不限于仅使用一种Web浏览器访问应用程序。大量各种各样的工具可以协助攻击Web应用程序,这些工具既可整合在浏览器中,也可独立于浏览器运作。这些工具能够提出普通浏览器无法提交的请求,并能够迅速生成大量的请求,查找和利用安全问题达到自己的目的。
绝大多数针对Web应用程序的攻击都涉及向服务器提交输入,旨在引起一些应用程序设计者无法预料或不希望出现的事件。以下举例说明为实现这种目的而提交的专门设计的输入。
更改以隐藏的HTML表单字段提交的产品价格,以更低廉的价格欺诈性地购买该产品。
修改在HTTP cookie中传送的会话令牌,劫持另一个验证用户的会话。
利用应用程序处理过程中的逻辑错误删除某些正常提交的参数。
改变由后端数据库处理的某个输入,从而注入一个恶意数据库查询以访问敏感数据。
勿庸置疑,SSL无法阻止攻击者向服务器提交专门设计的输入。应用程序使用SSL仅仅表示网络上的其他用户无法查看或修改攻击者传送的数据。因为攻击者控制着SSL通道的终端,能够通过这条通道向服务器传送任何内容。如果前面提到的任何攻击成功实现,那么不论其在FAQ中声称其如何安全,该应用程序都很容易受到攻击