2011-11-16 97 views
0

好吧,我知道這已經被覆蓋過,但我的問題嚴格涉及到的是做這樣的事情的安全性。我有一個頁面,主要是由PHP函數生成的,這些頁面位於一個單獨的文件中。我的頁面調用...AJAX和PHP,調用PHP函數

<div class="transferfunds"> 
<?php dashboardFunction::buildPickers($uid); ?> 
</div> 

像這樣,我的PHP函數(顯然略)......

function buildPickers($uid){ 
$user =& JFactory::getUser(); 
} 
現在

,我想發生的是什麼,它加載的具體內容加載,但是當用戶與特定的東西交互(比如下拉菜單)時,我想使用AJAX再次調用該函數並重新加載該特定的div。

我得到我可以通過Ajax傳遞一個變量,並調用函數TAT像...

$.ajax({ 
     type : 'POST', 
     url : 'post.php', 
     dataType : 'html', 
     data: { 
      dataTest : 'test' 
     }, 
     success : function(data){ 
       $('#div').html(data); 
     }, 
     error : function(XMLHttpRequest, textStatus, errorThrown) { 

     } 
    }); 

和測試它在像這樣的PHP ...

if(isset($_POST['dataTest']) && !empty($_POST['dataTest'])) { 
dashboardFunction::buildPickers($uid); 
} 

但會A.這項工作是肯定的,而且B.這實際上是安全的嗎?它是否容易受到任何類型的注射等?謝謝!

回答

1

我假設你會以這種方式傳遞用戶憑證,對嗎?如果是這樣,這種方法不是很安全。最好依靠用戶會話在腳本之間共享用戶數據。

+0

@Greg Thompson:如果以上情況是這樣,請不要看我的回答,因爲我誤解了你的問題。 – PeeHaa

+0

我假設用戶憑證是因爲'transerfunds'類被分配給Greg的第一個代碼塊中的div。可能是一個延伸:p –

+0

它不會;傷害到雙重檢查:D – PeeHaa

0

A.將這項工作肯定

知道它會工作。不過,如果檢索到不同的內容,調用不同的url可能會更清晰但它會工作

B.將這個實際上是安全

它是安全的。但是,如果你想以這種方式訪問​​多個功能:

$ func = $ _POST ['dataTest']; dashboardFunction - > $ func();

當然你應該添加一些允許的功能的白名單。

但是,如果你只是想訪問1硬編碼的功能,並檢查變量是否設置沒有問題。

0

從你的函數名稱看起來你使用這個函數來構建選擇列表或加載內容 - 只要你不刪除/插入/更新數據,但只是選擇,那麼你很可能只要您在PHP頁面(buildPickers函數)中運行查詢之前正確清理輸入。

你也可以做一些事情,比如使用Ajax請求傳遞令牌,並在動作頁面上檢查令牌,所以使用直接調用動作頁面的URL來簡單觸發事件會更加困難。

最後,如果您實際上在做SELECT操作,您應該使用GET而不是POST,但實際上它並不重要。

+0

剛剛注意到你正在使用Joomla-所以是,使用JUtility :: getToken()傳遞一個標記,然後使用'JRequest :: checkToken('get')或jexit('Invalid Token')來測試它; (如果最終發佈數據,則刪除'get'。 – julio