在Javascript中使用存储在$ _GET / $ _SESSION中的值

时间:2010-04-22 05:14:00

标签: php javascript session

我对Javascript和PHP很陌生,所以如果我问一些非常愚蠢的问题,请耐心等待。

好吧,说我需要使用存储在PHP $ _GET或$ _SESSION中的值,建议只做

这样的事情吗?

var something = PHP echo $_SESSION or $_GET

2 个答案:

答案 0 :(得分:3)

您需要使数据安全,以便JavaScript进行解析。 var something = <?php echo $SESSION['foo']; ?>如果是数字,则可以正常工作。如果是字符串,则需要添加引号。如果字符串包含特殊字符,那么它们需要转义等等。

通过json_encode运行数据是确保JavaScript安全的好方法。

由于$ _GET是用户输入的数据,你无法知道它是一个没有检查的数字,所以如果你不安全,那么你有一个巨大的XSS漏洞。即使你这样做,那么你之后用JavaScript做的数据也可能会让你暴露在XSS中。

答案 1 :(得分:0)

将此作为代码格式的答案,但是......

@luhiz:想想你将数据插入到包含javascript“元字符”的javascript块中会发生什么。假设您将一个人的全名作为查询参数传递,如下所示:

http://example.com/index.php?name=John+O'toole

在PHP中,您将拥有:

$_GET['name'] = "John O'toole";

当你把它放到javascript块中时,你会得到:

var name = John O'toole;

现在你遇到了一些问题:

  1. 您已将原始用户可黑客数据插入到您的网页中
  2. javascript语法错误,因为您的字符串未包含在引号中
  3. 另一个语法错误,因为名称包含单引号,它开始一个字符串,然后不会以另一个引号终止。
  4. 讨论:

    1. 这是一种典型的XSS(跨站点脚本)攻击。您将用户提供的数据放入html页面而没有任何安全性。最简单的攻击示例是使用http://example.com/index.php?name=alert("you've been hacked!");。试一试,看看会发生什么。
    2. 2&amp; 3:通过使用json_encode,PHP会自动将您编码的任何内容转换为语法上安全的Javascript。这并不意味着它是“安全”的代码 - 它仍然可以包含恶意数据。但是,当客户端浏览器加载页面时,它不会导致语法错误。通过这样做:

       var name = <?php echo json_encode($_GET['name']);
      

      你会得到类似的东西:

       var name = "John O'toole";
      

      javascript解释器将接受,没有任何投诉。