【问题标题】:What is the safest way of passing arguments from server-side PHP to client-side JavaScript [duplicate]将参数从服务器端 PHP 传递到客户端 JavaScript 的最安全方法是什么 [重复]
【发布时间】:2011-04-06 12:07:36
【问题描述】:

在我的应用程序中,我严重依赖 JavaScript 来增强用户界面,但所有数据都来自数据库并由 PHP 处理。默认情况下,我使用“回声”语句来“及时”替换所需的值,如下所示:

var myVariable = <?php echo $myVariableInPHP ?>

然而,这并没有让我觉得非常优雅,我担心此类代码的稳定性和可维护性。

我在这里有其他选择吗?

对于服务器端,我使用的是 Symfony 1.4 PHP 框架。

谢谢,

【问题讨论】:

  • 我可以评论一下我觉得有趣的是,一个超过 3 年的问题与一个一个月大的问题重复吗?这很有趣。
  • 这可能真的让你大吃一惊,但你的评论的答案已经发布在那个新线程中......在你问之前!但说真的,新问题有更好的答案和更多的观点。这是正确的标记。
  • 我觉得有趣的是,4 年后写重复问题的人将这个问题标记为重复问题
  • @CreativeMind 呵呵。公平地说,另一个问题就像一篇关于该主题的文章,所以它可能是一个更好的资源。我想,在它很酷之前我就喜欢它了。

标签: php javascript symfony1


【解决方案1】:

我最喜欢的方式是:

<?php

$var = array(
  'prop1' => 'value1',
  'prop2' => 'value2',
  // ...
);

?>
<script type="text/javascript">
   var varNameSpace = <?php echo json_encode($var); ?>;

   alert( varNameSpace.prop1 ); // -> 'value1'
</script>

使用json_encode() 可确保传递给Javascript 的值被转义并且格式正确。使用公共变量容器还可以防止过度使用全局空间(窗口)。

【讨论】:

    【解决方案2】:

    您可能希望为此使用 JSON,它在 PHP(检查 json_encode())和 JavaScript 中都非常简单。

    &lt;script&gt;-标签和理解 JavaScript 的浏览器中使用是安全的。请注意,PHP 函数不编码 &lt;&gt;

    一些 PHP 示例:

    $user = (object) array("name"=>"Joseph", "age"=>29, "email"=>"asdf@example.net");
    echo '<script type="text/javascript"> var user = '.json_encode($user).'; </script>';
    

    【讨论】:

      【解决方案3】:

      我会尝试使用 JSON。这是一个指向 php.net 的链接,说明如何执行此操作。

      http://php.net/manual/en/book.json.php

      【讨论】:

      • 想解释一下为什么我被否决了吗?
      【解决方案4】:

      您的第一个解决方案确实有效,但将客户端代码与服务器端代码混合并不是一个好习惯。最好将 javascript 放在单独的 .js 文件中(其中没有 PHP)

      我会首先创建一个 API(编写文档),例如

      GET
      http://localhost/getProfile?username=$username
      
      POST
      http://localhost/getProfile/$username
      

      它将使用 json_encode 返回 JSON 对象。您可以使用 json-p 进行跨域通信。然后从例如Jquery你可以很容易地得到数据。

      这样你的 javascript 会保持干净。

      【讨论】:

      • 我用 ExtJS 应用程序来做这件事。这些小部件严重依赖数据库中的数据,并且全部采用 JSON 格式。但是,如果您的网站应该是安全的,那么您现在必须与 CSRF 作斗争。
      【解决方案5】:

      我更喜欢use_dynamic_javascript() 助手。关于它的“坏”事情是您必须更多地考虑拆分渲染模板本身并将其配置为单独的请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-17
        • 2011-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多