AJAX:单页应用程序结构/安全性
Posted
技术标签:
【中文标题】AJAX:单页应用程序结构/安全性【英文标题】:AJAX: Single Page Application Structure/Security 【发布时间】:2013-02-14 23:56:25 【问题描述】:我正在开发一个使用 AJAX 的网络/移动应用程序。该应用程序有 4 个页面:登录 1 和 3 个受保护的页面仅显示给已登录的用户。
我打算使用单页应用程序模式,因此所有 4 个页面都将立即加载,每个页面都在其自己的 DIV id 中,并且最初只有登录页面可见。
一旦用户输入他的用户/密码,我创建一个 XMLHttpRequest 并与一个内部 php 脚本通信,该脚本反过来使用准备好的语句来检查用户/密码是否存在于数据库中,并返回 true 或 false 给XMLHttpRequest。
如果结果为真,我将使受保护的 DIV 可见并从服务器加载必要的数据,创建另一个 XMLHttpRequest 并通过另一个 PHP 脚本与数据库交互。当用户在其他受保护的页面之间导航时,将重复此步骤。我还计划使用 XMLHttpRequest/内部 PHP 脚本实现 cookie 以保持用户登录。
下面是描述该过程的图像。
问题:
这个结构看起来好吗?可能会出现我没有预见到的任何问题? 结构是否安全?有什么方法可以进一步强化它?【问题讨论】:
JPEG 不是最适合保存此类图表的格式。顺便说一句,您使用的是 HTTPS,不是吗? 是的,我在 PHP 服务器端脚本上使用 HTTPS。 【参考方案1】:只要确保每个数据请求都受到登录系统的保护,这种结构就可以了,以防止向未经身份验证的用户提供数据。
您还需要确保当用户注销时,您将所有数据从 DOM 中清除。这可以通过强制刷新页面window.location.reload()
或手动删除所有包含数据的 DOM 节点并覆盖任何变量来轻松完成。考虑使用您的应用程序的用户,然后注销,然后另一个用户开始使用同一设备。如果您在注销时不刷新数据,则未经身份验证的第二个用户可以打开任何 DOM 工具(例如 Firebug/Chrome 开发工具)并查看最后一个用户的敏感数据。
不要忘记关注 SQLi、XSS(包括基于 DOM 的 XSS——不仅仅是反射/存储的 XSS)和会话安全(会话劫持等)方面的一般网络应用安全。
【讨论】:
我正在关注 SQLi 和 XSS,但我忘记了从 DOM 和基于 DOM 的 XXS 中刷新数据。很好的提醒,谢谢。以上是关于AJAX:单页应用程序结构/安全性的主要内容,如果未能解决你的问题,请参考以下文章
从(AngularJS)单页应用程序直接(并且简单!)AJAX 上传到 AWS S3