2011-10-15 60 views
0

使用找到的代码here我将输入字段发布到php脚本。结果看起来像这样根据名称自动将POST JSON分配给变量

data:{ 
"textfield": ["",""], 
"dropdown": ["option1","option1"], 
"siteTitle":"this is the site title", 
"siteKey":"", 
"siteurl":"", 
"address1":"", 
"address2":"", 
"address3":"", 
"landline":"", 
"method":"addSite", 
"small-input":"", 
"medium-input":"", 
"large-input":"" 
} 

我正在使用以下选取每个字段。

$data = $_POST['data']; 
$data =stripslashes($data); 
$obj = json_decode($data); 
$siteTitle = sanitize($obj->siteTitle); 
if (!$siteTitle){echo json_encode(array("msg"=> "Site title missing"));break;} 

有没有在PHP的方式来自动步直通每次贴field并将其分配给基础上,name变量?

对于那些关注似曾相识,don't be.

+0

你基本上要求一个稍微不同的['register_globals'](http://php.net/manual/en/security.globals.php)版本,这是一个相当重要的安全风险。我建议不要走这条路。 – Amber

+0

不,他不是:)〜 – AlienWebguy

回答

1
$obj = json_decode($data); 
foreach($obj as $key => $val) 
{ 
    $$key = $val; 
} 
var_dump($method); // 'addSite' 
+0

帮我理解这段代码的最后一部分。什么会通过var_dump传递? –

+0

我不知道 - 4年前,今天没有任何意义。 – AlienWebguy

0

你可以这样做:

$array = json_decode($json, true); 
extract($array); 

,但让我强烈鼓励你做到这一点。这是非常懒惰的编程,使脚本对可变注入攻击保持开放,并且基本上试图在其“register_global默认为开启”的恶意日子里重新创建PHP可怕的愚蠢噩梦。

+0

是的,这也是我的想法。所以真的这是一个道德问题,像技术问题一样。但是我不能看到这个漏洞,因为我正在请求这个变量并对它进行消毒,而不是变量才变得可用。 – maxum

+0

什么都没有说恶意用户不能伪造一个帖子到你的表单并提交'_SESSION [issuperuser] = 1'类的东西。除非您手动指定要以这种方式自动创建的每个变量,并且只需循环提交的每个变量,就可以将ANYING注入到脚本中。这就是为什么register_globals一直是这样一个愚蠢的想法。 –