PHP to communicate with javascript

PHP to communicate with javascript

本文关键字:javascript with communicate to PHP      更新时间:2023-09-26

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

除了重定向到页面 C 外,B 还发布了一些指示身份验证状态的参数。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
?>

有没有更好的方法可以做到这一点,因为我认为这有点"白痴"......

您的代码:(修复了stype拼写错误(

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

查看此代码,我可以看到的最大问题是您正在输出一个$_POST值而不对其进行任何转义。

这是一个潜在的安全威胁;考虑一下如果有人提供了一个发布到您网站的表单,uin值设置为一串 HTML 代码,从 > 开始关闭div,会发生什么。他们的代码会出现在你的网站上,就像你把它放在那里一样。通过仔细的样式设置,他们可以使用它使您的网站看起来和行为随心所欲。不太好。

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

或者,在这种情况下,由于它是(或似乎是(一个数字 ID 值,您可以简单地将其转换为 int 以确保它不包含不需要的数据,无论实际的 post 数据包含什么:

$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属性来说,这是一个不太可能的名称,但重点是成立的(

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

你的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
?>