2011-02-01 112 views
0

我的網站包含原型框架並使用PHP進行編程。 (我知道非常非常基本的JavaScript)原型請求Ajax.Updater每個請求的安全/認證

網站正常遊客&其行爲

有些什麼類似KeepVid一樣.COM

A)它有一個輸入框,用戶把鏈接和比按提交。 (?var = userfoo通過原型框架工作執行)(該請求發送到同一頁面action = index.php)

B)它顯示加載gif比它顯示結果默認情況下它隱藏並顯示請求。

C)現在父窗口html(主頁)不刷新或重新加載。

D)用戶再次把鏈接,並按提交它做一個相同的過程。

每件事情都很有用,但我在檢查日誌時發現問題。有些人使用腳本來抓取我的輸出。不是普通的訪問者,你可以說或者是leechers。

問題:

1)但是,如果有人放HTTP:在瀏覽器// URL VAR = foo的& VAR =欄就會生成div的輸出內容,這意味着無主網頁的訪問。任何人都可以通過查詢並直接得到結果。

2)我嘗試使用會話令牌但它失敗,因爲它在div中重新生成。也沒有刷新父級,所以會話令牌不匹配(這個只有與AJAX請求1的請求給出輸出沒關係,但第二個請求由於父令牌相同而失敗,並且提交按鈕使用相同的令牌)在純PHP它的工作原理是刷新頁面,但我不想刷新頁面。我只是想顯示加載gif。

3)任何人都可以使用curl php並抓取頁面。所以我想要一個Javascript驗證(HIDDEN)。如果失敗,則啓動驗證碼,如果Javascript被禁用,則啓動驗證碼安全。我不想讓它在詳細或通過命令行或通過其他腳本(用於抓取)上工作。

4)我不確切知道這些東西被稱爲什麼。我認爲他們是XHR。

我想從我的網站提供安全

1)URL變量注入象 ?變種= foo的& & VAR2 =酒吧 也讓轉換(如果有的身體確實是)轉移該頁面 ?重定向= foo和負載炫魅,並將該重定向值輸入框

2)基於服務器的驗證,但裏面的股利和必須顯示加載GIF和DONOT重新加載整個頁面..

東西,我看了,但失敗...

1)JCryption但它需要jQuery的比我要重新編碼的一切......

2)

// If the request did not come from AJAX, exit: 
      if($_SERVER['HTTP_X_REQUESTED_WITH'] !='XMLHttpRequest'){ 
      exit; 
      } 

此命令失敗,IE7瀏覽器。 (這是唯一的最佳方法,但不能在一個瀏覽器中失敗)還有一個問題是,如果某個創建者在本地主機上運行它,則將該動作更改爲http://myurl,而不會接受它。另外,如果我們使用curl來發送自定義標題,那麼它將會失敗。

3)使用JavaScript加密和PHP解密。有些JS將Enrypt和PHP功能解密。 (通過使用隱藏的表單元素輸入) 這也是一個很好的方法,但我很難編輯的源來傳遞變量我的意思是從div到服務器。

也使用其他幾種方法,但我認爲所有上述方法是最好的描述我的問題... 請明白,解決方案可能是非常小或大,但我不明白JavaScript非常親切地闡述。

回答

0

您需要一個nonce

  • 生成隨機值並將其存儲在會話變量中。

    session_start(); 
    $_SESSION['nonce'] = base64_encode(md5(mt_rand())); 
    
  • 使用該值作爲一個隱藏的元素形式,或者將其添加到URL AJAX作爲參數。

    <input type="hidden" name="nonce" value="<?php echo $_SESSION['nonce'] ?>"/> 
    
  • 將會話中存儲的值與AJAX請求的值進行比較。如果失敗,則通知瀏覽器403錯誤。

    session_start(); 
    if ($_GET['nonce'] !== $_SESSION['nonce']) { 
        header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
        die('Forbidden. Please check your cookies and try again.'); 
    } 
    
  • 只更新成功的頁面。

    new Ajax.Updater({success: 'ELEMENT ID'}, 'AJAX URL'); 
    
  • 如果檢測到錯誤,則更新程序失敗並且不做任何更改。

+0

或將其作爲參數添加到AJAX URL? – Altainta 2011-02-01 17:09:42