PHP5.5 short_open_tag=在安全漏洞上?

PHP5.5 short_open_tag=在安全漏洞上?,php,php-shorttags,Php,Php Shorttags,我已经升级到了PHP5.5,在PHP.ini中,现在short\u open\u tag=off我意识到了这一点,因为一些文件现在没有运行,因为不是一个直接的安全漏洞,但如果条件合适,它可能会成为一个安全漏洞 首先,让我们来说明标准。在PHP5.4及更高版本中,short\u open\u tag=on指令适用于除或(echo short tag)以外的所有短标记,并且建议不要在仅PHP文件中关闭标记。这可能看起来很奇怪,但有时代码中可能会出现无法跟踪的错误,因为在开始之前或结束括号之后有一个空

我已经升级到了PHP5.5,在PHP.ini中,现在
short\u open\u tag=off
我意识到了这一点,因为一些文件现在没有运行,因为
不是一个直接的安全漏洞,但如果条件合适,它可能会成为一个安全漏洞

首先,让我们来说明标准。在PHP5.4及更高版本中,
short\u open\u tag=on
指令适用于除
(echo short tag)以外的所有短标记,并且建议不要在仅PHP文件中关闭标记。这可能看起来很奇怪,但有时代码中可能会出现无法跟踪的错误,因为在开始之前或结束括号之后有一个空格(“”)字符。这是一个众所周知的问题。我坚持这两种做法,因为我已经看到,由于在旧项目中使用不同的标记,这两种做法都会出错

这一切是从哪里开始的?

早在PHP的早期,人们就开始意识到PHP标记与XML和ASP的标记冲突。是的,您可以使用
作为打开/关闭标记。 然后决定PHP将使用
,以区别于XML和ASP,这是PHP代码的顶级名称空间。 实际上,ASP标签的引入是为了方便ASP开发人员采用PHP

ASP标记由
ASP_标记
ini指令处理,它们应该关闭

再一次-关于短标签的辩论已经举行,这就是为什么现在短标签和短回音标签之间存在分离。我认为这是件好事。只需替换遗留代码中的所有短标记

现在谈谈安全问题

您应该担心的唯一情况是,当您有一些用户输入以某种方式通过PHP解释器时。你需要脱衣:

  • 普通PHP标记
  • 短PHP标记
  • 短回音标签
  • ASP样式标记
  • 字节移位代码注入
  • 任何有
最后一部分-
-非常重要,因为它今天没有被使用(我们最好没有它),但据我记忆所及,它仍然受到PHP解释器的支持。因此,HTML脚本标记之间的任何内容都将被解释为PHP

字节移位代码注入到底是什么

这有点难以解释,但基本思想是它是模糊代码注入。因此,如果攻击者能够以某种方式注入一些PHP代码,并且他/她不希望维护人员/开发人员立即识别这些代码,那么他/她可以执行以下操作:

$smth = 'rpub "lbh ner nggnpxrq naq lbhe jrofvgr unf orra gnxra bire";';
eval(str_rot13($smth));
其思想是“一个sting的blob”是一个php代码字符串,但是字节移位了,所以它是模糊的。在我的示例中,
eval()
将接收

echo“您受到攻击,您的网站已被接管”
。 我之所以使用,是因为很容易前后混淆字符串,但这可能是一个基于或或任何其他字符串操作函数的自定义函数

防止此类攻击的最佳方法是防止执行
eval()。你应该可以通过网络来实现这一点。当然要解析你的代码!但也要禁用
eval()

对于Wordpress这样的系统来说,这种类型的攻击很难被发现,因为它在数据库中存储了很多东西,其中大部分都是不必要的。我个人见过这样的代码注入到网站(不是我维护的:D)中的两种方式之一:

  • 数据库损坏(应用程序存储被解释的内容时可能发生)
  • 直接PHP源文件损坏-这更容易分析-只需将其与存储库中的最新版本进行比较,或将其与某些源备份进行比较(再次通过
    diff
希望这有帮助。 所以,请开始坚持这个原则


  • 除了echo标签
    可能重复的“What?!”外,不要使用短标签?!在编写PHP十多年之后,我怎么会不知道这种语法呢?我现在需要去检查一下我是否有未知的安全漏洞。。。是啊,很遗憾,这个老功能应该存在。我实际上需要为5.5验证这一点。我查一下。但我不记得它被删除了。+1是一个完美的详细解释,只是最后一个字的一个小错误让人烦恼:)回答得很好。对保持警惕有很大帮助