这里我有一个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代码可以调用它?
答案 0 :(得分:1)
没有完全可靠的方法可以确保,脚本是通过AJAX调用的。你可以做的事情:
HTTP_REFERRER
,(请注意:此值可以伪造)您可以使用
isset($ _ SERVER ['HTTP_X_REQUESTED_WITH'])&amp;&amp; strtolower($ _ SERVER ['HTTP_X_REQUESTED_WITH'])==='xmlhttprequest'
但当然,这也可以伪造
答案 1 :(得分:0)
在POST中发送一个额外的信息,让我们说$_POST['From_ajax']
,然后检查您的PHP程序是否设置了该信息 - 如果没有,则不执行任何操作,否则执行数据库命令。
编辑:当然,如果他们尝试并且能够在需要时调用您的脚本,任何人都将能够弄清楚它是如何工作的,这只会阻止打开它的随机用户意外执行脚本。如果你真的想要别人,除了你能够调用你的脚本,我想你可能需要某种电子签名。
答案 2 :(得分:0)
至少应该检查是否发出了POST
请求:
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
// your code
}
这样,每次通过GET
请求页面时,您都不会用空条目填充数据库。
您的代码也允许匿名发帖。它可能是这样设计的,但如果没有,您应该检查登录用户。通常你会使用sessions。
除此之外,您应该验证各个字段,有些可能是空的,但在插入之前可能必须填写其他字段。
编辑:您还可以在“主”页面中设置会话变量,并在ajax脚本中检查该变量。这样访问者必须至少访问一次主页,但在此之后,可以毫无问题地请求ajax脚本。