http_build_query()是将数据传输到jQuery的安全方法吗?

时间:2018-09-12 19:32:15

标签: php jquery

我正在使用类似于以下脚本的内容来生成无序的用户列表:

<?php

  $user_info = array(
    'name' => 'Curtis',
    'advisory' => 7,
    'color' => 'red'
  );
  $users = array($user_info);
  // Assume $users could have multiple user arrays in it
  foreach ($users as $user) {
    $name = $user['name'];
    $data = http_build_query($user);
    echo "<li data='$data'>$name</li>";
  }

?>

此处,所有用户信息都被编码为HTML属性data。这样做的想法是在前端,有一个jQuery函数,当单击用户时,可以编辑该用户的信息,一直到其姓名,颜色等。然后将该信息发送回给使用jQuery的$.ajax()的服务器。

我想将信息保存在<ul>中而不是<table>中,因为我不需要显示颜色或建议,因此可以使用HTML属性来存储数据。我的问题是:考虑到对通过$.ajax()接收到的数据进行后端验证,这是一种安全的数据传输方式吗?我知道特殊字符可能会出现问题,但是只会使用整数和简单字符串。如果没有,是否有更好的方法来实现此功能?

1 个答案:

答案 0 :(得分:0)

不,不是,也不是该功能的用途。 http_build_query仅对URL的字符串进行编码,根本无法提供保护。

如果您想不使用ajax将变量传递给javascript,则将其作为JSON传递。

$users = array($user_info);

echo '<script>';
echo 'var users=JSON.parse(' . json_encode($users) . ');';
echo '</script>';

这不是一个完美的解决方案,因为您将JS和php混合使用,但是获得了javascript对象,因此可以轻松地在javacsript中与users [0] .name一起使用它等等。或者如果用户在数组中,则遍历用户

第二种选择是使用'data-',并在<li>echo '<li data-user-name="' . $user['name'] . '">'标签中使用它。

第三个常用的方法是使用ajax请求来获取作为php脚本响应返回的json对象。

如果您想确保安全,则应该清理,验证和转义用户数据。