【发布时间】:2015-06-10 01:47:00
【问题描述】:
我看到其他地方有人问过这个问题:
Escaping HTML strings with jQuery
@travis 标记为正确的答案说 .text() 很好。但是,有些人在评论中(例如@nivcaner 和@lior)提到这种解决方案并不好。我们站在哪里?我可以安全使用它吗?
我正在开发一个 Web 应用程序,用户可以在该应用程序中在其浏览器中创建一个可以通过 JQuery 添加表格、标题和视频的文档。当用户“保存”他的文档时,它的结构被翻译成一个数组,其中数组的所有元素都由“纯”文本组成,没有标签(例如,每个表格单元格都有一个数组元素,其中包含该文本的文本)细胞等)。然后将数组转换为 JSON 格式并发送到服务器,并通过 PHP 以 JSON 格式处理/清理/保存。
之后,其他用户可以访问该文档,这当然会引入潜在的安全漏洞。想法是他们从服务器读取 JSON 数据,然后在客户端通过 javascript/JQuery 重新创建文档。
虽然我非常有信心我的 PHP 代码能够正确地清理 JSON 数据,但我担心恶意用户可能会欺骗其他用户从不受信任的来源读取 JSON 数据的攻击。出于这个原因,我觉得最好在客户端重新创建表等之前验证来自服务器的任何 JSON 数据。假设变量currentCellText 包含要写入表格单元格#mytd 中的(JSON 读取)文本,我可以安全地使用代码$("#mytd").text(currentCellText) 重新创建单元格内容吗?
【问题讨论】:
-
@DanielG。使用 HTTPS,你可以避免这个问题。
-
@DanielG。这取决于您的托管服务。我使用 Heroku,它不会为 HTTPS 收取额外费用,实际上同时支持对同一服务器的 HTTP 和 HTTPS 请求。如果 HTTPS 为您带来额外费用,您可能需要考虑使用其他主机。
-
HTTPS 的计算成本在现代硬件上介于零和无法测量之间。这在 2015 年根本不是问题。与 HTTPS 相比,提供臃肿的非压缩资产对性能的影响更大。
-
@tadman :经过一番思考,我相信 HTTPS 无处不在,可以避免中间人攻击。如果我的 JSON 数据可能受到此类攻击的影响,那么我的服务器提供的所有文件都可能受到影响,包括用于“清理”JSON 的 HTML 和 javascript……HTTPS 是要走的路。
-
如果您需要保护它,这意味着您至少需要 HTTPS。真的没有办法解决。希望这不会太麻烦。
标签: jquery json sanitization