2013-03-19 154 views
0

我正在爲jquery的.getJSON函數獲取JSON數據。我正在考慮使用.text來保證數據的安全(我相信這是正確的做法)。我測試過了,JSON是正確的。Javascript/jquery防止注入執行代碼

這裏是我對工作的腳本:

var firstpost = 0; 
var firstrun = 0; 
var lastpost = 0; 

^全局變量

 $.getJSON('chatget.php', { 
    'chatroomid' : '<?php echo $chatroomid; ?>', 
    'firstpost': firstpost, 
    'lastpost': '1'}, 
    function(data) { 
     var template = '<div id="_ID_" class="chatpost"> <div><b>_NAME_ </b> <a href="_URL_"> _USERNAME_ </a> _DATETIME_</div> <div><em>_TARGETS_</em></div> <div>_TEXT_</div> </div>'; 
     var appendhtml =''; 

     var datarows = data['New'].length; 
     lastpost = data['New'][datarows]['CPid']; 

     // Each row processor    
     $.each(data['New'], function(index, col){ 

     // Get initial data 
     if (firstrun == 0){ 
     firstpost = col.CPid; 
     firstrun = 1;} 

      // process targets 
      if(col.Targets !== null){ 
       var target = col.Targets.split(','); 
       var trow = target.length; 
       var targets = ''; 
       for (var i=0, len=target.length; i<len; i++){ 

        targets = targets + '@' + target[i] + ' ';}  
      }else {var targets = '';}; 

      // Append data to chatroom 
      var cpid = $.text(col.CPid); 
      var name = $.text(col.Name); 
      var username = $.text(col.Username); 
      var url = $.text(col.Url); 
      var text = $.text(col.Text); 
      var datetime = $.text(col.Datetime); 
      var targets = $.text(targets); 

      appendhtml = template.replace('_ID_',cpid).replace('_NAME_',name).replace('_USERNAME_',username).replace('_URL_',url).replace('_TEXT_',text).replace('_DATETIME_',date).replace('_TARGETS_', targets); 

     $('#chatroom').append(appendhtml); 
     }); 






     } // End Data function 
    ) // End Get Json 

出於某種原因,因爲我在這個代碼改變了一些東西導致崩潰螢火所以無論是我找到了在螢火蟲中的錯誤或我在編碼中做了非常錯誤的事情。我不認爲我正確使用$ .text ...

此外我想獲取數據['新']對象/數組中的最後一個值。 .length似乎沒有工作。

  var datarows = data['New'].length; 
     lastpost = data['New'][datarows]['CPid']; 

這是我的第一個javascript/jquery程序,所以如果你在代碼中看到錯誤,請告訴我。

+1

物體沒有長度,所以它不會令人驚訝,它不起作用?是的,你用錯誤的方式使用text(),這是一種鏈接到元素的方法。至於安全,這是不安全的,因爲它是客戶端,不管你使用什麼方法,它永遠不會是安全的。 – adeneo 2013-03-19 03:26:18

+0

對普通用戶來說安全。它從服務器接收用戶輸入的信息。該輸入從未被清除,但不能執行PHP端。我只是想阻止任何HTML /腳本能夠在數據追加之前被執行。一旦被附加,任何腳本都應該顯示爲純文本。 – Rujikin 2013-03-19 03:31:02

+1

驗證客戶端上的用戶輸入確實不會使其安全,最多可以使驗證對錶單稍微漂亮。在您將其發送回頁面之前,您需要在服務器側驗證數據。 – adeneo 2013-03-19 03:42:13

回答

1

爲了獲得最佳實踐,請將您的代碼封裝在anonymouse包裝函數中,以便您創建/使用的任何函數或變量都無法在外部環境中訪問。

(function(){ 
    //your code 
}()) 

注意:Google,jquery等都遵循這個系統的實踐!