在php中,对相同的参数多次使用GET命令和php标记


In php, using GET command for same parameter multiple times and php tags

首先,我听说一些web服务器允许你用$a而不是$_GET[a]到达参数,这不是这里的情况。

无论如何,我必须多次到达a,所以我每次都使用$_GET[a]而不是使用$a = $_GET[a]。在单个php标签在<?php ?>,这是一个问题,我应该绝对使用变量吗?这有关系吗?

另一件事是我的php文件真的打乱了我的html,我想知道它是否与多个得到的问题?(不应该,我只是担心)

谢谢。

您所提到的使用$a而不是$_GET['a'](或$_POST['a'])是一个被称为register_globals的旧功能。此特性很危险,会导致代码混乱,因此在PHP 5.3中被认为已弃用,并最终在PHP 5.4中删除。

然后,在脚本中到处使用$_GET['a']可能会导致问题,因为您应该永远不要信任用户输入(所有内容都来自$_GET, $_POST, $_REQUEST, $_COOKIE和一些来自$_FILES$_SERVER)。建议执行类似$a = sanitize($_GET['a']);的操作(sanitize函数不存在,这取决于您期望的值类型,您应该检查您得到的是整数,或有效日期,或其他,取决于您的需要)。从现在开始,您应该停止引用$_GET['a'],而是使用刚刚创建的新的经过处理的变量$a。因为如果您总是使用$_GET['a'],那么您很可能会忘记在某个地方对其进行消毒。

同样,在将这个经过处理的变量发送到SQL查询之前,您应该转义它或在准备好的语句中使用它,以避免SQL注入。在输出到html供用户查看之前,请使用htmlspecialchars来避免XSS攻击。

最后,关于将多个php块与html块混合在一起,这只是出于维护的原因,因为从长远来看,它将是一个彻底的混乱。尝试将您发送给用户的html与php代码分开。试着读一些关于MVC模式(模型-视图-控制器)的东西(这个链接可能太复杂了,或者也许你现在没有看到你刚刚开始使用php的实用程序(至少我没有看到它比混合html和php更好的方式,对于所有需要的复杂性),但试着抓住它背后的思想)。

首先,我听说一些web服务器允许你用$a而不是$_GET[a]到达参数,这不是这里的情况。

这是一个名为register_globals的PHP配置设置。这是不安全的,不应该使用。有关更多信息,请参阅此问题。

您可以随意访问$_GET数组中的元素,这不会引起问题。但是,如果您要将$_GET数组的元素(或任何其他用户提交的数据)打印到页面,则应该在打印之前通过htmlspecialchars()或类似的方式运行它,以防止XSS漏洞。

使用变量是您的首选,您可以决定这无关紧要。但是如果你多次使用同一个变量,那么变量就是前进的方向。

<?php echo htmlspecialchars($_GET['a']);?>

使用变量意味着它再次可重用,特别是如果你添加了额外的代码,这意味着只需为所有实例编辑一个变量。

<?php $a = htmlspecialchars($_GET['a']);
echo $a;
echo $a;
echo $a;
echo $a;
?>