我一直在研究这个问题几个小时但仍处于亏损状态。
我有一个带有链接的PHP页面(PAGE1.PHP),当用户点击链接时,PHP页面需要从数据库中读取一些数据并使用POST将这些数据发布到第三方站点。
我设法用CURL做了这个,但问题是虽然数据已发布且第三方页面确实正确加载,但URL(在浏览器中)仍然显示为PAGE1.PHP而不是第三方 - 我发布的派对网址。
我有办法怎么做吗?
我可以选择在PAGE1.PHP上创建一个表单,我从数据库中读取的数据设置为隐藏,链接作为提交。我没有尝试但是应该工作但是这意味着我从数据库中读取的数据可以由用户通过查看源来读取。
关于我如何做到这一点的任何想法?
答案 0 :(得分:4)
浏览器中的URL正确显示了您的原始网址,因为这是浏览器请求的内容,而这正是提供请求的内容;您的PHP页面在幕后发出POST请求以获取数据,但随后将其提供给您的浏览器。
要获得我认为您想要的结果,您需要重定向浏览器才能发布帖子。你是否正确关注隐藏数据的问题;听起来你可能需要做一些架构工作来解决这个问题。
答案 1 :(得分:1)
问题在于,当您使用CURL发布的是发布的 Web服务器时,而不是用户的浏览器。因此,如果使用任何会话或cookie,它们将不会继续使用。
我会做你提到的,创建一个隐藏的表单并以这种方式发布数据。你可能很聪明,并在jQuery中做一个document.ready,一旦加载了隐藏的表单,你就可以为用户发布它。虽然他们仍然有一个很小的机会来观看来源,但它会更加流线型。
<script>
$(document).ready(function() {
$('#hiddenForm').submit();
});
</script>
修改完整示例:
<?
$urlToPostTo = 'http://www.thirdPartyDomain.com/login';
$varsToPost['user'] = 'username';
$varsToPost['pass'] = 'password';
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#hiddenForm').submit();
});
</script>
<?
echo '<form id="hiddenForm" action="'.$urlToPostTo.'" method="post">';
/* create a hidden input for each var in 'varsToPost' */
foreach($varsToPost as $varName=>$varValue) {
echo '<input type="hidden" name="'.$varName.'" value="'.$varValue.'">';
}
echo '</form>';
?>
只需添加/删除$varsToPost
数组中的变量,它们就会自动插入。我想如果你传递的是密码/敏感数据,你总是可以在php中加密它并在js之前解密它表格提交。这仍然会让你打开,因为任何人都可以访问你的解密功能,但它会一目了然地掩盖你的数据。
即便如此,这种表单提交很快就会发生,很难说它是偷偷摸摸的。
答案 2 :(得分:0)