静态页面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
?>
有没有更好的方法来做到这一点,因为我觉得这有点像'白痴'......
答案 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>
。