PHP与javascript通信

时间:2013-07-17 09:43:12

标签: php javascript html ajax

静态页面A有一个表单,其中的操作提交到授权页面 B,这是一个动态页面。授权后,B将重定向到回调网址 C,由A传递给B.

除了重定向到页面C外,B还发布了一些表示auth状态的参数。 uin 是将在页面C的内容中使用的最重要的参数,即脚本。这些脚本需要 uin 以便稍后发送Ajax请求。问题如何将 uin 传递给静态页面C?

我得到的一个快速而肮脏的想法是用PHP文件包装静态页面C,并以隐藏的div输出数据,例如:

<?php
$html = file_get_contents("callback.html")
$div = "<div stype='display:none' uin={$_POST['uin']}></div>"
//add this div to $html and print it, need a little more work to figure out how to do this
?>

有没有更好的方法来做到这一点,因为我觉得这有点像'白痴'......

3 个答案:

答案 0 :(得分:1)

您的代码:(已修复stype错字)

$div = "<div style=\"display:none\" uin={$_POST['uin']}></div>";

看一下这段代码,我能看到的最大问题是你输出$_POST值而没有对其进行任何转义。

这是一种潜在的安全威胁;考虑如果有人提供了发布到您网站的表单,并将uin值设置为一串HTML代码,从>开始关闭div,会发生什么情况。他们的代码将显示在您的网站中,就像您将其放在那里一样。通过仔细的样式,他们可以使用它使您的网站看起来和行为,但他们想要的。不太好。

您可以通过在$_POST中包装html_entities()变量来解决这个问题,以便在输出到网站时将其正确转义。

或者,在这种情况下,由于它是(或似乎是)数字ID值,您可以简单地将其强制转换为int,以确保它不包含任何不需要的数据,无论实际的帖子数据包含什么: / p>

$uin = (int)$_POST['uin'];

...然后在输出中使用$uin而不是原始帖子数据。

我提出的第二点是有效性。 uin不是有效的HTML属性。它可能有用,但它无效。在HTML中执行自定义属性的正确标准方法是使用数据属性,如下所示:

$div = "<div style=\"display:none\" data-uin={$uin}></div>";

...即所有自定义属性的名称都应以data-

开头

建议这样做是因为它允许您拥有与真实属性同名的自定义属性,而不会有任何问题。例如,您可以拥有data-style,而不会与真正的style属性发生冲突。

这也意味着HTML规范可以添加新属性,而不会有与其他人的代码发生冲突的风险。例如,如果HTML的未来版本包含uin属性,未来的浏览器会使用该属性做一些聪明的元素,那么就会导致代码出现问题。如果您使用data-uin,则不会发生这些问题。 (好吧,所以uin不太可能是新标准HTML属性的名称,但重点是)

答案 1 :(得分:0)

您的PHP代码中存在语法错误,您需要屏蔽内联样式的引号,而您错过了添加一些冒号:

<?php
$html = file_get_contents("callback.html");
$div = "<div style=\"display:none\" uin={$_POST['uin']}></div>";
//add this div to $html and print it, need a little more work to figure out how to do this
echo($html); // print variable $html
echo($div); // print variable $div
?>

答案 2 :(得分:0)

也许你应该在用户会话中存储来自页面B的参数。在页面C上,您可以使用这些参数(在将任何内容输出到浏览器之前调用session_start()之后)。此外,如果您使用的是javascript,请考虑将uin放在javascript变量而不是html div中。类似于<script type="text/javascript">var uin = 123; </script>