它们的安全性相同吗?我被告知使用
<?=$function_here?>
不太安全,而且它会减慢页面加载时间。我严格倾向于使用echo。有哪些优点/缺点?
u7up0aaq1#
首先,<?=不是一个简短的开始标记,而是一个 shorthand echo,和<?php echo一样,而且它不能被禁用,所以,在它总是被启用的意义上使用是安全的。从 * 安全性 * 的Angular 来谈安全性,输出必须**始终根据输出媒体规则进行编码。例如,当回显HTML中的数据时,它必须是HTML编码的:
<?=
<?php echo
<?= htmlspecialchars($function_here, ENT_QUOTES) ?>
或者,在JavaScript中回显数据时,它必须是JavaScript编码的:
<script>var=<?= json_encode($function_here) ?>
或者,当它同时是HTML和JS时,则必须使用 both 编码:
<?php foreach($links as $label => $url): ?> <br> <form method="post"> <button class="my" onclick="<?=htmlspecialchars("window.open(".json_encode($url).")", ENT_QUOTES) ?>"> <?=htmlspecialchars($label, ENT_QUOTES) ?> </button> </form> <?php endforeach ?>
说到短开放标记,只有一个<?,而且它并不总是启用的(参见short_open_tag指令)。实际上,在PHP 5.3.0提供的php.ini-production文件中,它们在默认情况下是禁用的:
<?
short_open_tag
$ grep 'short_open' php.ini-production ; short_open_tag short_open_tag = Off
因此,在要分发的应用程序中使用它们可能不是一个好主意:如果不启用它们,应用程序将无法工作。另一方面,<?php不能被禁用--因此,使用这个函数是最安全的,即使它的写入时间较长。
<?php
jaql4c8m2#
Echo一般只是更好用,因为...1.它支持良好的编程风格。1.它不能在php.ini中关闭(短标签可以关闭)1.短标签将在PHP中删除6)但是,它们通常是相同的。另请参阅:
goucqfw63#
http://php.net/manual/en/language.basic-syntax.phpmode.php状态:从PHP 5.4开始,无论short_open_tag如何设置,短echo标记始终可以识别并且有效。short_open_tag关闭或打开不再重要。所以现在你可以不用担心,在你的模板中放置这样的标签:
<?= (($test) ? "val1" : "val2") ?>
现在是官方的了,“短回声标签”和“短标签”是非常不同的东西。
ztmd8pv54#
除了关于使用短标签是否是一个好主意以及是否应该被认为是不赞成的整个半宗教性的争论之外,最初的问题是使用短标签有多安全或不安全。简单地说,如果您在不支持短标记的服务器上使用短标记,则部分PHP代码可能会暴露,这可能被视为安全漏洞。
bihw5rsg5#
仅添加PSR的另一个来源:http://www.php-fig.org/psr/psr-1/PHP代码必须使用长标记或短回声标记;不得使用其他标签变体。具体说明:
<?php ?> and <?= ?>
mspsb9vt6#
你应该使用〈?=,并要求你的系统管理员/主机打开short_open_tags,它没有任何缺点要关闭,也没有减速,解析器寻找〈?的方式和它在索引中寻找〈?php一样,二分查找(也许〈?PHP是缓慢的,由于降低解析)。此外,在PHP 5.5中〈?=将默认打开,长期使用〈?=将首选〈?php echo semi。如果还不确定...谷歌一下会有很大帮助=D
6条答案
按热度按时间u7up0aaq1#
首先,
<?=
不是一个简短的开始标记,而是一个 shorthand echo,和<?php echo
一样,而且它不能被禁用,所以,在它总是被启用的意义上使用是安全的。从 * 安全性 * 的Angular 来谈安全性,输出必须**始终根据输出媒体规则进行编码。
例如,当回显HTML中的数据时,它必须是HTML编码的:
或者,在JavaScript中回显数据时,它必须是JavaScript编码的:
或者,当它同时是HTML和JS时,则必须使用 both 编码:
说到短开放标记,只有一个
<?
,而且它并不总是启用的(参见short_open_tag
指令)。实际上,在PHP 5.3.0提供的php.ini-production文件中,它们在默认情况下是禁用的:
因此,在要分发的应用程序中使用它们可能不是一个好主意:如果不启用它们,应用程序将无法工作。
另一方面,
<?php
不能被禁用--因此,使用这个函数是最安全的,即使它的写入时间较长。jaql4c8m2#
Echo一般只是更好用,因为...
1.它支持良好的编程风格。
1.它不能在php.ini中关闭(短标签可以关闭)
1.短标签将在PHP中删除6)
但是,它们通常是相同的。另请参阅:
goucqfw63#
http://php.net/manual/en/language.basic-syntax.phpmode.php状态:
从PHP 5.4开始,无论
short_open_tag
如何设置,短echo标记始终可以识别并且有效。short_open_tag
关闭或打开不再重要。所以现在你可以不用担心,在你的模板中放置这样的标签:
现在是官方的了,“短回声标签”和“短标签”是非常不同的东西。
ztmd8pv54#
除了关于使用短标签是否是一个好主意以及是否应该被认为是不赞成的整个半宗教性的争论之外,最初的问题是使用短标签有多安全或不安全。
简单地说,如果您在不支持短标记的服务器上使用短标记,则部分PHP代码可能会暴露,这可能被视为安全漏洞。
bihw5rsg5#
仅添加PSR的另一个来源:http://www.php-fig.org/psr/psr-1/
PHP代码必须使用长标记或短回声标记;不得使用其他标签变体。
具体说明:
mspsb9vt6#
你应该使用〈?=,并要求你的系统管理员/主机打开short_open_tags,它没有任何缺点要关闭,也没有减速,解析器寻找〈?的方式和它在索引中寻找〈?php一样,二分查找(也许〈?PHP是缓慢的,由于降低解析)。
此外,在PHP 5.5中〈?=将默认打开,长期使用〈?=将首选〈?php echo semi。
如果还不确定...谷歌一下会有很大帮助=D