【问题标题】:send from JS to PHP securely from another server从另一台服务器安全地从 JS 发送到 PHP
【发布时间】:2016-07-14 19:55:53
【问题描述】:

我想将我域上的 JS 中的信息安全地发送到另一个域中的 .php 文件,并且我希望 .php 只接受来自指定域的内容。

这是域 A

  $.ajax({
  POST: "https://domain-b.com/ant.php",
  data: mystring
})

这是域 B

 <?php 
for ($i=0;$i<count($_POST);$i++){
       #send to DB code 
    }
    ?>

顺便说一句,域 A 和域 B 都是单独的服务器。 我的理解是因为我使用HTTPS 安全和加密发送的数据,但是我看到任何人都可以从任何地方向.php 域发送信息。我想防止这种情况。 我想插入一个代码就像两者之间的密码一样,但是当我将它插入到 JS 中时,任何人都可以看到它,所以没有用。

【问题讨论】:

  • 使用IP whitelist 来验证请求来自域a?

标签: javascript php


【解决方案1】:

当您从服务器发送发布请求时。尝试在您的数据中发送密钥。并仅在密钥匹配时运行数据库代码。

<?php $_SESSION['key'] = md5(uniqid());
<input type="hidden" value="<?php echo $_SESSION['key']; ?>" name="key">

每次用户刷新页面时都会生成一个新的密钥。它会因用户而异。

$.ajax({
POST: "https://domain-b.com/ant.php",
 Data: mystring // contains secret key
})

php 服务器

<?php 
$Key //your secret key
if($_SESSION['key'] == key in form data){
  for ($i=0;$i<count($_POST);$i++){
   #send to DB code 
  }
}
?>

如果我正确理解了这个问题。这应该会有所帮助:)

【讨论】:

  • 密钥显示给每个人,因为它在 JS 中。我的意思是我可以做var Scrtkey='12312312313'; mystring = mystring+'scrt'+Scrtkey ; 然后每个人都看到它
  • 您在发布表单数据吗?
  • 是的,但它不包含密码。
  • 那么您正在寻找的是 CSRF 的解决方案。
  • 威尔,我觉得这里有机会。但是,如果我再次将 php 生成的密钥附加到 JS 中,它将可以看到它的工作,它必须仅从 php 发送到 php,如果您有想法请解释
【解决方案2】:

是的,使用 https 将加密数据。

要检查请求声称的来源,您可以检查$_SERVER['HTTP_REFERER'] 但是这可能是欺骗的,并且不可靠。

我会使用 PHP 会话。服务器 A 设置会话 ID。然后,服务器 B 可以从请求中读取会话 ID,以验证用户来自服务器 A。多个服务器可以共享会话数据。见How to manage a single PHP5 session on multiple apache servers?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    相关资源
    最近更新 更多