是否有充分的理由使用服务器端包含而不是LAMP环境中的包含



我只是好奇,在LAMP环境中使用SSI而不是PHP的include有什么好的理由吗?我真的想不出有什么好的论据支持它

TL;DR:不要使用SSI。如果您只包含100%静态HTML,(而不是其他include()或任何内容)请使用readfile()。。否则,只需使用include(),并确保任何随机的人都不能像我希望的那样写入这些文件。

SSI包含可能是一个主要的痛苦,因为它们特别依赖Apache(试着让nginx读取SSI……这并不有趣),并且除了……之外没有任何优势。。。。。。

如果有问题的文件,无论是包含SSI还是包含PHP——如果它具有不安全的写入权限,或者由于任何原因,不受信任的源能够对其进行写入,那么它将成为一个主要问题。请记住,当您include()时,您正在执行PHP代码。

有些SSI指令也可以执行exec(#exec),这也很危险,但可能比PHP本身的范围更有限(或者,它可能更危险,对每种特定情况都非常依赖和主观)

但是,如果您要包含的有问题的文件没有,也永远不会包含PHP代码,并且只包含HTML,请不要使用include(),而是使用:

echo file_get_contents('filename.html');

因为这样会更安全,因为从来没有执行过任何操作。或者你也可以使用readfile,如果你正在处理包含的非常大(10MB+)的文件,它可能会更有效:

readfile('filename.html');

因此,我可能认为应该使用PHP而不是SSI,但我可以根据经验告诉你,SSI可能会变得不可管理,并且至少不会比file_get_contents()readfile()更有好处,而include()有一个特殊的功能,即如果它包含PHP代码(好的或坏的),它就会被执行。

最新更新