防止其他用户调用php文件

时间:2014-02-05 22:30:21

标签: php mysql ajax

这里我有一个PHP代码:

更新:

<?php
  $pdo=new PDO("mysql:dbname=gmaestro_agro;host=localhost","gmaestro_agro","pass");
  $statement=$pdo->prepare("SELECT * FROM stat");
  $statement->execute();
  $results=$statement->fetchAll(PDO::FETCH_ASSOC);
  $json=json_encode($results);
  echo $json;
?>

我用Ajax调用此代码从MySql数据库中获取数据,但当有些代码转到域http://mywebsite.com/get_json.php时,此代码会向我提供有关数据库的任何信息。我如何阻止其他用户调用它,所以只有我的JS Ajax代码可以调用它?

3 个答案:

答案 0 :(得分:1)

没有完全可靠的方法可以确保,脚本是通过AJAX调用的。你可以做的事情:

  1. 进行适当的验证(以防止创建空行)
  2. 您可以查看HTTP_REFERRER,(请注意:此值可以伪造)
  3. 您可以使用

    isset($ _ SERVER ['HTTP_X_REQUESTED_WITH'])&amp;&amp; strtolower($ _ SERVER ['HTTP_X_REQUESTED_WITH'])==='xmlhttprequest'

  4. 但当然,这也可以伪造

答案 1 :(得分:0)

在POST中发送一个额外的信息,让我们说$_POST['From_ajax'],然后检查您的PHP程序是否设置了该信息 - 如果没有,则不执行任何操作,否则执行数据库命令。

编辑:当然,如果他们尝试并且能够在需要时调用您的脚本,任何人都将能够弄清楚它是如何工作的,这只会阻止打开它的随机用户意外执行脚本。如果你真的想要别人,除了你能够调用你的脚本,我想你可能需要某种电子签名。

答案 2 :(得分:0)

至少应该检查是否发出了POST请求:

if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
  // your code
}

这样,每次通过GET请求页面时,您都不会用空条目填充数据库。

您的代码也允许匿名发帖。它可能是这样设计的,但如果没有,您应该检查登录用户。通常你会使用sessions

除此之外,您应该验证各个字段,有些可能是空的,但在插入之前可能必须填写其他字段。

编辑:您还可以在“主”页面中设置会话变量,并在ajax脚本中检查该变量。这样访问者必须至少访问一次主页,但在此之后,可以毫无问题地请求ajax脚本。