2014-02-05 30 views
-3

这里的其他用户我有一个PHP代码:防止从调用PHP文件

UPDATE:

<?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; 
?> 

我叫阿贾克斯此代码获取从MySQL数据库中的数据,但是当一些去域名http://mywebsite.com/get_json.php此代码给我的数据库的任何人的信息。我怎样才能防止其他用户调用这个,所以只有用我的JS Ajax代码才能调用它?

+0

你最初的问题是关于使用mysql_ *'的INSERT。你的更新有一个使用PDO的“SELECT”。你应该决定你想问什么,这只是在浪费每个人的时间。 – jeroen

+0

对不起......我只是想阻止调用php文件 –

+0

我已经更新了我的答案。 – jeroen

回答

0

至少,你应该检查POST请求是否被做:

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

这样,你就不会每次都为空项填写你的数据库该页面通过GET请求。

您的代码还允许匿名发帖。它可能是按照这种方式设计的,但如果没有,则应该检查登录用户。通常你使用sessions

除此之外,你应该验证单个字段,有些可能是空的,但其他可能需要填充,然后再进行插入。

编辑:您还可以在“main”页面中设置会话变量,并在ajax脚本中检查该变量。这样,访问者至少需要访问主页面一次,但在此之后,可以请求ajax脚本没有任何问题。

+0

我更新了我的问题,请参阅,使用PDO时是否更改了内容? –

0

在POST中发送更多信息,比如说$_POST['From_ajax'],然后检查PHP程序是否设置了该信息 - 如果没有,则不执行任何操作,否则执行databse命令。

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

+0

我更新了我的questin,所以请看看它, –

1

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

  1. 做一个适当的验证(以防止空行的创建)
  2. 您可以检查HTTP_REFERRER,(注意:这个值可以伪造)
  3. 您可以使用

    isset($ _ SERVER [ 'HTTP_X_REQUESTED_WITH'])& &用strtolower($ _ SERVER [ 'HTTP_X_REQUESTED_WITH'])=== '的XMLHttpRequest'

但当然,也该可以伪造

+0

您也可以混淆Javascript代码,所以它会使其更难以对其进行反向工程。 – adrian7

+0

我更新了我的问题,请参阅,使用PDO时是否更改了内容? –

+0

无需任何逆向工程,您可以例如简化查看Firebug的网络标签以查看发送到服务器的请求。所以不值得为这个特殊原因混淆某些东西 – Flixer