我正在做同行評議,我發現有人使用window.location.search來檢查已發送給給定(搜索)頁面的對象。使用window.location查詢頁面的GET參數是否安全?
這樣做是否安全?我在想,我們可以在腳本塊中輸出HTML輸出中的參數,並驗證打印的變量而不是查詢window.location。
我正在做同行評議,我發現有人使用window.location.search來檢查已發送給給定(搜索)頁面的對象。使用window.location查詢頁面的GET參數是否安全?
這樣做是否安全?我在想,我們可以在腳本塊中輸出HTML輸出中的參數,並驗證打印的變量而不是查詢window.location。
有一點需要注意這種方法。 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
。但是,如果您在地址欄中添加任何內容並再次單擊該鏈接,它將報告與第一次相同的內容。
希望這不是一個問題,我無法想象它會以任何方式影響你,但它是很好的知道。
如果啓用javascript,則可以安全使用window.location.search
。
就像一些無用的進一步信息:該屬性是據我所知在Netscape Navigator 2/MS Internet Explorer 3中引入的,所以我會說它使用起來相當安全,即使它不是任何標準(還)。
在'安全'或'這項工作總是'安全嗎?
即使window.location廣泛,它仍然不是W3C標準的一部分。然而,它在2006年被添加到工作草案規範中:基本上意味着瀏覽器可能會支持它,也可能不支持它。所以從'這個工作總是會',我會猜你會有一個小小的機會。
這樣做是否安全?
是的。假設您不需要每個參數具有多個值,那麼將參數作爲名稱 - >值映射的示例代碼:
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;
}
它是ECMAScript最新工作草案的一部分。你應該很安全的使用它:http://www.w3.org/TR/Window/#location – Prestaul 2009-01-20 23:12:08