> >网站资源
..> >图书馆:TechXchange
. . . .>> TechXchange:嵌入式软件
.. .. .. >>主题:ADA和Spark
一个web应用程序是一个客户端-服务器程序,它使用web浏览器来运行客户端。典型的web应用程序包括在线web邮件、在线银行、在线购物等。客户端负责与用户交互,并显示从服务器获得的结果。另一方面,服务器负责存储用户的数据,保持数据一致性,并根据用户的交互更新数据。
在web应用程序开发中,安全性经常被低估。这是一个重要的挑战,因为web应用程序必须保护用户的数据不被恶意用户窃取和破坏。由于软件和编程错误,这种腐败和盗窃经常发生在服务器内部。
CWE/SANS top251列出最危险的软件错误。像Javascript和Python这样的宽松语言比Java和Ada这样的强类型语言更容易受到攻击。Ada语言处理了几个CWE2因此会在开发过程中被捕获。这使得基于ada的服务器实现更安全,更不易受到攻击。
ADA Web应用程序(AWA)3.是Ada 2012中构建web应用程序的框架。这个项目开始于2011年,最初的想法是在Ada中实现一些Java技术,这些技术在web应用程序开发中被证明是成功的。事实上,Java EE(现在的Jakarta EE)定义了一组标准api,供企业构建web应用服务器使用。在fodem 2019 Ada开发室和AdaCore 2019 TechDays上展示了AWA框架。
在许多web应用程序中,AWA框架提供了几个可用和可扩展的模块。这包括登录、身份验证、用户、权限、管理评论、标签、投票、文档和图像。它提供了一个完整的博客,问题和答案,以及一个wiki模块。一些web应用程序已经将AWA用作核心技术:Ada France网站(https://www.ada-france.org)、Jason项目管理应用程序、Atlas演示程序和作者的个人博客(https://blog.vacs.fr)。
使用AWA构建的应用服务器由几个Ada组件和库组成,这些组件和库被打包并相互作用。首先,它将使用Ada Web Server来服务HTTP请求(见图).它将能够连接到几个数据库,包括PostgreSQL, MySQL,和嵌入式SQLite数据库通过使用Ada数据库对象库。该框架通过Ada服务器和Ada服务器面库实现的Java servlet技术来处理web请求。
从头开始启动项目永远不会容易。为了解决这个问题,AWA框架附带了一个有助于设置项目的工具。该工具Dynamo是一个命令行工具,它提供了多个子命令来帮助多个开发任务。设置项目后,它用于生成ADA数据库映射代码并简化多个开发任务。
AWA框架处理web开发人员面临的最重要的挑战。
数据库访问
服务器端的第一个挑战是与数据库的交互。为了帮助完成这项任务,AWA框架使用对象关系映射(ORM)。数据库中包含的数据表可以使用UML类图或XML或YAML描述文件进行描述。根据这些描述,Dynamo工具将生成数据库SQL模式,以及允许应用程序轻松访问数据表内容的Ada包。
ORM将在一个特定的Ada标记记录中映射每个数据库表。Ada标记的记录提供了从映射的SQL表中查找、插入、更新和删除元素的操作。通过使用这样的Ada类型,应用程序可以继续受益于Ada的强类型,而且不必为SQL问题操心。ORM的使用确保了应用程序不会受到SQL注入的伤害。
访问控制
当服务器必须处理一个请求时,有必要在不同的步骤中验证用户是否被允许执行操作。艾达安全库负责执行这项任务。
首先,库提供了一个认证框架,允许实现RFC 6749中描述的OAuth 2标准。4在对用户进行身份验证之后,Ada Security库可以验证用户是否具有访问资源的权限。应用程序定义必须实施的权限,并为每个权限关联一个安全策略管理器。安全策略管理器负责检查是否根据用户的凭据授予权限。
在应用程序的不同地方,可以检查其中一个或另一个权限。Ada Security库将根据经过身份验证的用户和与权限关联的安全策略对访问进行授权或不授权。
Web表示
与客户端浏览器的交互要求服务器验证它接收到的请求参数,并为浏览器生成HTML内容。在这种情况下,AWA框架实现了Java EE平台定义的Java Server Faces标准的面向组件的用户界面。Ada Server Faces库在Ada中完全实现,它受益于Java JSR 344标准中定义的机制。5Java XML Facelet模板用于描述要呈现的视图的内容。这些模板还描述了如何处理浏览器发送的输入参数。它们由Ada Server Faces库进行验证和检查。
XML Facelet模板和Ada运行时之间的链接是通过另一种Java标准实现的:JSR 245描述的Java表达式语言。6Ada EL库实现了该标准,并创建了XML表示页面和Ada应用程序变量之间的链接。
使用ADA来处理请求参数并生成HTML内容可降低最终应用程序的漏洞。在每个阶段,我们都受益于ADA强的打字机制。
休息API.
单页Web应用程序传统上使用在客户端浏览器中运行的JavaScript框架。像Reactjs,AngularJS和Vue.js等框架通过使用REST API与服务器交互。这样的API已经变得如此普遍,即OpenAPI计划于2015年由几家公司创建,包括SmartBear,Google,Microsoft,IBM和PayPal。7OpenAPI规范由此诞生,8这使得描述服务器提供的任何REST API成为可能。
通过编写服务器REST api的描述,可以同时生成客户机和服务器绑定。的确,OpenAPI生成器9为客户端绑定和服务器绑定提供超过33种不同的编程语言。当然,客户端和服务器绑定支持ADA。通过使用生成的ADA Server绑定,简化了写入REST API的任务。
当客户端进行REST请求时,它首先由处理HTTP协议的ADA Web服务器库。然后它将向ADA Servlet库提供请求,该库将通过OpenApi生成的绑定处理请求。
通过此过程,涉及ADA安全库以验证与REST操作相关的权限。最后,当允许操作并验证请求参数时,OpenAPI绑定将调用ADA操作来处理请求。成功完成该操作后,OpenAPI绑定将格式化为XML或JSON,返回到客户端的响应。在这些级别中的每一个中,ADA强的打字会减少多种漏洞,包括缓冲区溢出,使得其REST API实现更安全。
结论
从数据库连接到客户端浏览器交互,可以从Ada编程语言的强大web开发中获益。在每个级别上,通过让编译器验证其中的几个错误,Ada的使用消除了几个软件和编程错误。Ada并不局限于对软件至关重要的嵌入式环境,使用像AWA这样的框架可以确保在最终的web应用程序中实施安全约束。
StéphaneCarrez是高级软件工程师Twinlife.
参考
1.25个最危险的软件错误,https://cwe.mitre.org/top25.
2.AdaCore网络安全技术,罗德里克·查普曼和亚尼克·莫伊
3.Ada Web应用程序,https://github.com/stcarrez/ada-awa
4. RFC 6749,OAuth 2.0授权框架
5.JSR 344, Java服务器面
6.JSR 245, Java服务器页面,第二章表达式语言
7.OpenAPI倡议,https://www.openapis.org/
8. Openapi规范,http://spec.openapis.org/oas/v3.0.2
9.OpenAPI发电机https://github.com/openapitools/openapiegenerator
> >网站资源
..> >图书馆:TechXchange
. . . .>> TechXchange:嵌入式软件
.. .. .. >>主题:ADA和Spark