我对Javascript和PHP很陌生,所以如果我问一些非常愚蠢的问题,请耐心等待。
好吧,说我需要使用存储在PHP $ _GET或$ _SESSION中的值,建议只做
这样的事情吗?
var something = PHP echo $_SESSION or $_GET
答案 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;
现在你遇到了一些问题:
讨论:
http://example.com/index.php?name=alert("you've been hacked!");
。试一试,看看会发生什么。2&amp; 3:通过使用json_encode,PHP会自动将您编码的任何内容转换为语法上安全的Javascript。这并不意味着它是“安全”的代码 - 它仍然可以包含恶意数据。但是,当客户端浏览器加载页面时,它不会导致语法错误。通过这样做:
var name = <?php echo json_encode($_GET['name']);
你会得到类似的东西:
var name = "John O'toole";
javascript解释器将接受,没有任何投诉。