2014-02-05 33 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