据我所知,在浏览器中运行的JavaScript实现需要运行不受信任的代码,并以安全的方式对不受信任的数据进行操作。在服务器OTOH上运行的语言(例如Python)实现运行可信代码,只需要安全地处理不受信任的数据。
这种差异是否意味着这两种语言实现需要从安全性角度解决根本不同的问题?
是否存在通过不受信任的代码和数据而不是仅通过不受信任的数据进行的攻击?如果是这样的话,假设Python实现可以忽略这些类型的攻击,但是JS实现必须对它们安全吗?
或者,通过不受信任的代码可能发生的所有攻击是否也可以通过不受信任的数据进行?在哪种情况下,Python实现应该使用与JS实现一样多的安全特性?
换句话说,与恶意数据和恶意代码相比,仅针对恶意数据保护语言实现是一项更简单的任务吗?
发布于 2018-05-28 16:08:01
是否存在通过不受信任的代码和数据而不是仅通过不受信任的数据进行的攻击?
如果可以信任代码,则通常可以在进一步处理数据之前使用此受信任代码验证不受信任的数据。如果代码也不受信任,这是不可能的。这就是为什么浏览器内部的Javascript引擎(正在执行不可信代码)在有限的环境(沙箱)中运行,因此不受信任的代码不会对底层系统造成损害。例如,这意味着文件和网络访问受到严重限制。
在某些情况下,攻击者设法将自己的代码注入可信的执行环境中。如果是这种情况,攻击者代码具有相同的信任级别,那么其他受信任的代码就会造成巨大的破坏,因为环境的假设是代码可以被信任。这种注入的一个典型示例是对攻击者提供的数据调用评估,从而将这些数据解释为受信任的代码。
换句话说,与恶意数据和恶意代码相比,仅针对恶意数据保护语言实现是一项更简单的任务吗?
是的,如果可以完全信任代码,则不需要对执行环境执行额外的限制,因为可以预期受信任的代码正确地验证不受信任的数据。当然,作为深入防御的一部分,推荐使用限制,因为大多数复杂的代码都有bug。
另一方面,如果代码不能被信任,则必须限制执行环境所能做的事情。这使得它变得更加复杂,因为除了现有的语言之外,还需要这种保护。而且,过去几年Java沙箱中的所有bug都表明,设计和实现这样一个受限的执行环境并不容易。
https://security.stackexchange.com/questions/186632
复制相似问题