gpt4 book ai didi

PHP 5.5 short_open_tag=on 安全漏洞?

转载 作者:可可西里 更新时间:2023-10-31 22:08:50 25 4
gpt4 key购买 nike

我已经升级到 PHP5.5 并且在 PHP.ini 现在 short_open_tag=off我认识到了这一点,因为有些文件现在没有运行,因为 <?而不是 <?php .

现在有两种解决方案可以搜索任何 php 文件并将打开标签更改为 <?php或激活 short_open_tag=on
第二个选项有什么安全问题吗?

最佳答案

不是直接的安全漏洞,但在适当的条件下可能会成为一个漏洞。

首先让我们规范标准。在 PHP 5.4 及更高版本中 short_open_tag=on指令适用于所有短标签,除了 <?= - echo 标签。
由于可移植性,通常认为在整个代码中使用短标签是一种不好的做法。我个人现在确实使用短标签。
自 PHP 5.4 和 >= 5.4 起,短回显标签 <?=始终可用且不受 short_open_tag 的影响ini 指令。我认为将 echo 标签与其他标签分开的决定是一个很好的决定。

其实PSR Standards建议这个。所以:
PSR-1建议只使用 <?php ?><?= ?> (echo 短标签) - 没有其他变化 , 和 PSR-2建议不要关闭 PHP-only 文件中的标签。这可能看起来很奇怪,但有时由于在开始之前或结束括号之后的单个空格 (' ') 字符,您的代码中可能会出现无法追踪的错误。这是一个众所周知的问题。我坚持这两种做法,因为我看到这一切都因为旧项目中使用不同的标签而出错。

这一切是从哪里开始的?

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

ASP 标签由 asp_tags 处理ini 指令,它们应该关闭。

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

关于安全 .

您应该担心的唯一情况是当您有一些用户输入以某种方式最终通过 PHP 解释器时。您将需要剥离:

  • 普通 PHP 标签
  • PHP 短标签
  • 短 echo 标签
  • ASP 样式标签
  • 字节移位代码注入(inject)
  • 任何有 <script language="php"></script> 的东西

  • 最后一部分 - <script language="php"></script> - 非常重要,因为它今天没有被使用(没有它我们会更好)但据我所知,PHP 解释器仍然支持它。因此,该 HTML 脚本标记之间的任何内容都将被解释为 PHP。 All this is very well explained here .

    什么鬼 字节移位代码注入(inject) ?

    这有点难以解释,但基本思想是 混淆代码注入(inject) .因此,如果攻击者以某种方式能够注入(inject)一些 PHP 代码并且他/她不希望维护者/开发人员立即识别它,他可以执行以下操作:
    $smth = 'rpub "lbh ner nggnpxrq naq lbhe jrofvgr unf orra gnxra bire";';
    eval(str_rot13($smth));

    这个想法是“刺痛的 Blob ”是一个php代码字符串,但字节移位所以它被混淆了。在我的例子中 eval()将收到
    echo "you are attacked and your website has been taken over"
    .
    我正在使用 str_rot13()因为很容易前后混淆字符串,但这可能是基于 chr() 的自定义函数或 ord() 或任何其他字符串操作函数。

    防止此类攻击的最佳方法是防止 eval()执行。您应该可以通过 disable_functions ini directive 做到这一点。 .当然要解析你的代码!但也要禁用 eval() .

    这种类型的攻击对于像 Wordpress 这样的系统来说真的很难注意到,它在数据库中存储了很多东西,其中大部分都是不必要的。我个人见过以以下两种方式之一对网站(不是我维护的:D)进行的此类代码注入(inject):
  • 数据库损坏(当应用程序存储一些被解释的东西时可能)
  • 直接 PHP 源文件损坏 - 这更容易分析 - 只是 diff它与存储库中的最新版本或与某些源备份进行比较(再次通过 diff )。

  • 希望这有帮助。
    所以请开始遵守 PSR Standards .
  • 不要使用短标签,除了 echo 标签 <?=
  • 禁用 ASP 样式的标签
  • 注意代码注入(inject)。
  • 关于PHP 5.5 short_open_tag=on 安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554753/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com