一个被混淆为Python、Jython和CPython之间的区别的lil。 我知道Jython是Python在Java中的实现,CPython是相同的,只是它是用C实现的
但我真正困惑的是如何识别Python中的漏洞。 比如下面两个。在
例如-CVE-2016-5636-在这里,该漏洞似乎无法在Jython中复制。在
https://bugzilla.redhat.com/show_bug.cgi?id=1345857
同样看-CVE-2016-5699 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5699
上面写着 “中的CRLF注入漏洞HTTPConnection.putheaderCPython之前的2.7.10版本和3.4.4版本之前的3.x版本中的urllib2和urllib函数允许远程攻击者通过URL中的CRLF序列注入任意的HTTP报头。”
这是否意味着CVE-2016-5699在Jython不易受攻击?在
总的来说,我想知道的是,Python中的漏洞是否意味着它在Jython中是易受攻击的?在
不一定。当你提到“Python”这样的东西时,你可能指的是两个不同的东西:
通常,Python语言在不同的实现中变化不大。改变的是语言的处理方式,包括调用哪些外部系统函数。在
没有任何其他区别的Python通常指的是标准实现CPython。其他的,如您上面提到的,是Jython和IronPython。每一个都在不同的VM中运行:Jython的JVM和IronPython的dotnet。例如,这些VM可能以不同的方式分配内存,从而防止在不同的VM中发生基于内存的错误。在提到的CVE-2016-5636的例子中,我们注意到Jython调用Java版本的zip,而CPython可能调用zip的C版本。在
简而言之,如果这个缺陷出现在语言处理问题的方式上,它很可能会影响所有的实现。否则,您将需要逐个检查每个平台的漏洞。在
附录:根据the Red Hat tracker for CVE-2016-5699,这是语言错误,因此在更新之前,很可能(但不保证)在所有实现中都易受攻击。在
不一定,这一切都取决于Python标准库JPython使用的部分,哪些被修改,哪些被重新实现,哪些被省略。。。在
urllib
是标准Python发行版的一部分,您可以在标准CPython和JPython的Lib
文件夹中找到{因此,您不能依靠它来判断Python代码本身是否有问题(它是否在特定版本中得到修复)。在
此外,利用漏洞并不一定与实际的Python包装低层字节码和最终的解释器有关——它可以是在这些东西中的任何一个,也可以是它们的组合。这就是为什么他们说在一个特定的CPython版本中不存在该漏洞,因为假设整个堆栈以及标准库都已更新。在
因此,除非漏洞攻击明确指出问题出在Python代码本身(例如,在您的示例中是在
urllib.py
)中,并且在所述模块的特定版本中得到了修复,否则您无法确定这不是由于底层解释器造成的,如果是的话——PVM和JVM是否也存在同样的问题。在相关问题 更多 >
编程相关推荐