2009-01-20 80 views
3

我正在做同行評議,我發現有人使用window.location.search來檢查已發送給給定(搜索)頁面的對象。使用window.location查詢頁面的GET參數是否安全?

這樣做是否安全?我在想,我們可以在腳本塊中輸出HTML輸出中的參數,並驗證打印的變量而不是查詢window.location。

回答

1

有一點需要注意這種方法。 window.location在頁面加載時靜態設置,並且不會檢測用戶在該時間之後對地址欄所做的更改。這不應該成爲一個問題,但重要的是要知道。

請將以下代碼保存爲HTML文件,並在瀏覽器中啓動它:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
     <title>test</title> 
    </head> 
    <body> 
     <a href="javascript:void(0);" 
       onclick="alert(window.location);">click me</a> 
    </body> 
</html> 

「點擊我」的主播會顯示當前窗口的位置onclick。但是,如果您在地址欄中添加任何內容並再次單擊該鏈接,它將報告與第一次相同的內容。

希望這不是一個問題,我無法想象它會以任何方式影響你,但它是很好的知道。

12

如果啓用javascript,則可以安全使用window.location.search

就像一些無用的進一步信息:該屬性是據我所知在Netscape Navigator 2/MS Internet Explorer 3中引入的,所以我會說它使用起來相當安全,即使它不是任何標準(還)。

+1

它是ECMAScript最新工作草案的一部分。你應該很安全的使用它:http://www.w3.org/TR/Window/#location – Prestaul 2009-01-20 23:12:08

1

在'安全'或'這項工作總是'安全嗎?

即使window.location廣泛,它仍然不是W3C標準的一部分。然而,它在2006年被添加到工作草案規範中:基本上意味着瀏覽器可能會支持它,也可能不支持它。所以從'這個工作總是會',我會猜你會有一個小小的機會。

0

這樣做是否安全?

是的。假設您不需要每個參數具有多個值,那麼將參數作爲名稱 - >值映射的示例代碼:

function getParameters() { 
    var parameters= new Object(); 
    var parts= window.location.search.substring(1).split('\x26'); 
    for (var parti= parts.length; parti-->0;) { 
     var subparts= parts[parti].split(';'); // support semicolon separators as well as ampersand (see HTML 4.01 section B.2.2) 
     for (var subparti= subparts.length; subparti-->0;) { 
      var parparts= subparts[subparti].split('=', 2); 
      if (parparts.length==2) 
       parameters[decodeURIComponent(parparts[0])]= decodeURIComponent(parparts[1]); 
     } 
    } 
    return parameters; 
} 
相關問題