我已经升级到 PHP5.5,PHP.ini 中现在 short_open_tag=off
,我之所以知道这一点是因为一些文件现在不能正常运行,因为使用了 <?
而不是 <?php
。
现在有两种解决方案:查找任何 PHP 文件并将开放标签更改为 <?php
或激活 short_open_tag=on
。
第二个选项是否存在安全问题?
我已经升级到 PHP5.5,PHP.ini 中现在 short_open_tag=off
,我之所以知道这一点是因为一些文件现在不能正常运行,因为使用了 <?
而不是 <?php
。
现在有两种解决方案:查找任何 PHP 文件并将开放标签更改为 <?php
或激活 short_open_tag=on
。
第二个选项是否存在安全问题?
short_open_tag=on
指令适用于除了echo标签<?=
之外的所有短标签。
通常认为,在代码中大量使用短标签是一种不好的实践,因为它会影响可移植性。我个人不使用短标签。
自从PHP 5.4和>= 5.4版本以来,短echo标签<?=
始终可用,并且不受short_open_tag
ini指令的影响。我认为这个将echo标签与其他标签分开的决定是正确的。<?php ?>
或 <?= ?>
(echo 短标签) - 没有其他变体,而 PSR-2 建议在仅 PHP 文件中不要关闭标签。这可能看起来很奇怪,但有时你的代码中可能会因为单个空格 (' ') 字符出现在您的打开或关闭括号之前或之后而导致无法跟踪的错误。这是一个众所周知的问题。我遵循这两种做法,因为我曾经因旧项目中使用不同标签而遇到过很多问题。
所有这一切都始于何时?
在PHP早期,人们开始意识到PHP标签与XML和ASP的标签冲突。是的,你可以使用<% //code here %>
作为开/关标签。
然后决定使用<?php ?>
来区分PHP自身和XML和ASP,这是一种PHP代码的顶级命名空间。
实际上,ASP标签被引入是为了方便ASP开发人员采用PHP。asp_tags
ini指令处理,它们应该关闭。<script language="php"></script>
的内容最后这部分 - <script language="php"></script>
- 非常重要,因为它现在并没有被使用(我们最好不要用它),但据我所知,PHP解释器仍然支持它。因此,在这个HTML脚本标记之间的任何内容都将被解释为PHP。所有这些在这里都有很好的解释。
什么是字节移位代码注入?
这有点难以解释,但基本思想是它是混淆的代码注入。因此,如果攻击者某种方式能够注入一些PHP代码,并且他/她不希望维护者/开发人员立即识别它,他可以做如下操作:
$smth = 'rpub "lbh ner nggnpxrq naq lbhe jrofvgr unf orra gnxra bire";';
eval(str_rot13($smth));
eval()
将接收echo "you are attacked and your website has been taken over"
。我使用str_rot13(),因为很容易将字符串混淆回来和向前混淆,但这可以是基于chr()
或ord()
或任何其他字符串操作函数的自定义函数。eval()
执行。您应该能够通过disable_functions
ini指令来实现这一点。当然,解析您的代码!但也要禁用eval()
。diff
将其与存储库中的最新版本进行比较或将其与某个源备份进行比较(同样通过 diff
)。希望这可以帮助您。 因此,请开始遵守PSR标准。
<?=
外,不要使用短标记