2014-07-08 42 views
0

這是一個很好的方法,通過javascript調用php函數?在php中處理ajax請求的最佳方法

我POST數據是這樣的:

{ 
    0: [ 
     { 
      "name": "function", 
      "value": "toggle_user_status" 
     } 
    ], 
    1: [ 
     { 
      "name": "user_id", 
      "value": "1" 
     } 
    ], 
    ... 
    ... 
} 

而且我的Ajax類看起來是這樣的:

<?php 
class Ajax 
{ 
     public function handleAjax() { 
       $load_function = $_POST['function']; 
       return call_user_func(array($this,$load_function)); 
     } 

     private function toggle_user_status() { 
       return '555nase'; 
     } 
} 

我知道$ _ POST變種是不是安全的,但是這不是問題的關鍵。我想知道如果這是一個好方法來調用函數或不... ...?

PS:網址http://local.yolo/admin/ajax只接受來自請求登錄管理員

+0

不理想的是,什麼阻止我編輯你的JS(像Firebug之類的東西),並改變它來運行'delete_all_users()'?我知道猜測一個函數名稱並不容易(你可能永遠不會有這個函數),但是如果你真的這麼做了, – naththedeveloper

+0

這是非常不安全的。認真。假設有人編輯發佈數據來調用'delete'函數。你要嗎? No. – ex3v

+0

您需要驗證您的輸入。調用本身對我來說很好(雖然不理想) - 如果你檢查參數(允許的函數,允許的參數)... – thedom

回答

1

我知道你不關心安全隱患,並且你知道他們。不過,這不是一個好主意。原因是,你的JavaScript必須知道PHP的實現。如果你在PHP方面改變了某些東西,你必須在JavaScript方面改變一些東西。最好是要求 PHP軟件做些什麼,但你不在乎它是怎麼做的。

例如,你可以爲你的JavaScript定義一個公共接口,公共接口是URL。你不在乎他們如何處理任何事情,你只是想獲得一個也遵循你定義的公共接口的迴應。例如,對於您的示例:

jQuery.post("/admin/user/toggle-status", { id: 1 }); 

URL是此時的公共接口。

用戶類處理與用戶相關的事情:

<?php 

interface UserInterface { 

    public function toggleStatus(); 

} 

的AJAX類處理AJAX調用:

<?php 

class AJAX { 

    public function handle() { 

    } 

} 

關注的分離是很重要的位置。

0

只是檢查,從爵士未來的功能。使用這樣的事情:

<?php 
    class Ajax 
    { 
     private $_allowed_functions = array('toggle_user_status'); 

     public function handleAjax() { 
      $load_function = $_POST['function']; 
      return in_array($load_function, $this -> _allowed_functions) ? call_user_func(array($this,$load_function)) : NULL; 
     } 
    } 
相關問題