将表单的GET转换为PHP变量?

时间:2013-04-10 22:08:15

标签: php sql-injection

我正在尝试将以下表单的GET函数作为预定义变量的一部分。

有什么想法吗?提前谢谢!


让我再解释一下我真正想要做的事情。我目前经营着一个专注于美国股市的网站。我用method = GET创建了一个HTML表单。此表单用作搜索框以查找股票代码符号。使用GET方法,它将股票代码放置在URL的末尾,我创建了一个quotes.php页面,该页面捕获此信息并根据键入框中的股票代码显示股票图表。对于公司名称,我创建了一个名为company.php的页面,该页面声明了公司名称的所有变量(恰好是$后跟股票代码)。文件company.php是quotes.php中包含的唯一文件。

这就是它的来源:'。 $$ _ GET [“symbol”]。 “

上面的代码根据输入到表单中的内容将GET更改为变量。如果有人在框中输入与company.php页面中的变量不匹配的内容,我使用“die”来显示错误消息。

我还在每家公司的company.php页面变量中添加了一些变量,这些变量将显示每个股票在哪个证券交易所上市。这些变量以“$ ex_”开头。所以,我试图做的是将符号键入“$ ex_”附加的框中,以便显示相应的证券交易所。

我的问题是:

  1. 有没有办法将表格中输入的内容添加到“$ ex _”?
  2. 这是一种不安全的方式来编写这样的代码(可以被黑客入侵)吗?
  3. 谢谢大家!

5 个答案:

答案 0 :(得分:5)

不要为变量加前缀并使用变量(可能不安全,尤其是用户输入),请尝试以下方法:

$ex = array(
    "foo" => "bar",
    ...
);
if( !isset($ex[$_GET['symbol']])) die("Error: That symbol doesn't exist!");
$chosen = $ex[$_GET['symbol']];

答案 1 :(得分:0)

这是另一种方法:

extract($_GET, EXTR_PREFIX_ALL, "ex");

虽然最好像这样使用它,以确保没有安全问题。

extract($_GET, EXTR_SKIP);

答案 2 :(得分:0)

PHP's extract()完全符合您的要求,您应该将“ex_”指定为您想要的前缀。

然而,盲目使用此类功能存在安全问题和意外后果,因此请阅读功能参数后面的其他段落。

答案 3 :(得分:-1)

以下是否能满足您的需求?

$myGetVariable = $_GET['symbol'];
$ex_{$myGetVariable} = "Something";

答案 4 :(得分:-1)

$_GET['symbol'] = 'APPL';

if (!empty($_GET)) {
  foreach ($_GET as $k => $v) {
   $var = 'ex_'.$k ;
    $$var=$v;
  }
}

var_dump($ex_symbol);

APPL