-1

这是我现在在 php 中所做的

$layout_type = $_REQUEST['layout_type'];
$aside_location = $_REQUEST['aside_location'];
$aside_style = $_REQUEST['aside_style'];
$nav_bg = $_REQUEST['nav_bg'];
$nav_bg_hover = $_REQUEST['nav_bg_hover'];
$nav_text_color = $_REQUEST['nav_text_color'];

必须有一个函数为我编写同名的函数吗?

这是我的ajax调用

function generate_clicked()
{
    var  formData = $("#form").serialize();
    $.ajax({
        url : "process.php",
        type: "POST",
        data : formData,
        }).done(function ( data ) {
        try{
            $('#preview').val(data.css);
            }
        catch(err)
        {
            console.log(err);
        }
        document.getElementById("my_iframe").src = data.live_preview_html_page;
    });
}   
4

2 回答 2

1

这应该有效:

foreach ($_REQUEST as $Key => $Value) {
  ${$Key} = $Value;
  }

但是,我建议不要这样做,以免造成严重的安全隐患。为了确保安全,我建议首先根据数组检查值(将其列入白名单):

// Complete yourself...
$ValidValues= array("layout_type", "aside_location");

foreach ($_REQUEST as $Key => $Value) {
  if (in_array($Key, $ValidValues)) {
    ${$Key} = $Value;
    }
  else {
    throw new Exception("Security violation. Requesting non-existing variable " . $Key);
    }
  }

尽管您应该问自己为什么需要这个,因为您的请求没有意义。数组是用来存储这种数据的,没有多少单独的变量,而且你已经在你的 $_REQUEST 中有了。因此,如果您可以直接使用数据,或者提供更多代码/上下文,请在您的代码中查看,以便我们可以进一步帮助您解决问题。

于 2013-10-31T01:53:45.957 回答
0

当前版本的 PHP 提供了extract()执行您想要的功能的功能,但不建议继续使用它,$_REQUEST因为任何用户都可以更改您的表单客户端并将意外变量提交到您的 PHP 脚本。

如果您选择使用此功能,强烈建议您使用EXTR_SKIP标志或提供前缀以防止现有变量被意外更改。

extract($_REQUEST, EXTR_SKIP); 
// the EXTR_SKIP flag will prevent variables from being overwritten
// or:
extract($_REQUEST, EXTR_PREFIX_ALL, 'prefix_'); 
// prepend all your new variable names for safety

也就是说,到目前为止,最安全的方法是像现在一样显式设置每个变量。这样,您就可以准确地知道何时设置了哪些变量,并将安全风险降至最低。

于 2013-10-31T01:56:12.693 回答