Java源文件在编译时是否可以运行任意代码?

Java源文件在编译时是否可以运行任意代码?,java,javac,Java,Javac,我是否可以构造一个Java源文件,这样当用javac编译而不是用Java调用时,它将运行任意代码 或者我可以假设通过javac运行任意源文件是安全的吗?无论源文件是如何设置的,javac都不可能执行Java。它所要做的就是将java文件编译成类文件。无论源文件是如何设置的,javac都不可能执行java。它所要做的就是将java文件编译成类文件。我从来没有实际使用过这个功能,但是javac可以运行注释处理器——我认为这是一些任意代码。处理器必须位于处理器路径中,默认情况下,处理器路径只是用户类路

我是否可以构造一个Java源文件,这样当用javac编译而不是用Java调用时,它将运行任意代码


或者我可以假设通过javac运行任意源文件是安全的吗?

无论源文件是如何设置的,javac都不可能执行Java。它所要做的就是将java文件编译成类文件。

无论源文件是如何设置的,javac都不可能执行java。它所要做的就是将java文件编译成类文件。

我从来没有实际使用过这个功能,但是javac可以运行注释处理器——我认为这是一些任意代码。处理器必须位于处理器路径中,默认情况下,处理器路径只是用户类路径。因此,根据您的用例,我认为是的,这是一个需要注意的安全问题。您可能需要确保使用-proc:none禁用注释处理,或者采取一些其他预防措施


请参阅。

我从未实际使用过此功能,但javac可以运行注释处理器-我认为这是一种纯粹的任意代码。处理器必须位于处理器路径中,默认情况下,处理器路径只是用户类路径。因此,根据您的用例,我认为是的,这是一个需要注意的安全问题。您可能需要确保使用-proc:none禁用注释处理,或者采取一些其他预防措施


请参阅。

我会把钱放在安全答案上。如果这样做不安全,那么这就是javac中的一个安全漏洞。@MattBall:这样的安全漏洞曾经存在过吗?我不知道。Java已经存在很长一段时间了,它是一个巨大的代码库,经历了巨大的变化。我知道没有这样的漏洞,但我敢打赌没有。我会把我的钱放在it的安全答案上。如果这样做不安全,那么这就是javac中的一个安全漏洞。@MattBall:这样的安全漏洞曾经存在过吗?我不知道。Java已经存在很长一段时间了,它是一个巨大的代码库,经历了巨大的变化。我知道没有这样的漏洞,但我敢打赌没有。