簡體   English   中英

為什么Request.QueryString只讀?

[英]Why is Request.QueryString readonly?

我以為你不能在沒有重定向的情況下更改服務器上的QueryString。

但是這段代碼對我有效:

Request.QueryString編輯

我很驚訝。

以下是我對此的疑問:

  1. 為什么Request.QueryString只讀?
  2. 為什么這個代碼/黑客工作*?
  3. 如果您在完成編輯后立即更改為只讀,包括錯誤錯誤或意外行為,以及維護和理解代碼,那么它的安全性如何?
  4. 如果您只使用PageLoad和OnPageRender,那么在事件周期中最有意義的是進行瘋狂編輯嗎?

*更多細節:

我有一個頁面,其中包含分組到選項卡的項目。 每個選項卡都是一個asp:LinkBut​​ton

我希望能夠直接鏈接到特定選項卡。 我使用QueryString參數'tab = tabName'來做到這一點。 有用。 但是當我單擊一個新選項卡時,查詢字符串仍然在Url中,因此Querystring中指定的選項卡被激活,而不是我單擊的選項卡。

通過使用Request.QueryString編輯,這不會發生。 然后我的解決方案“有效”。

提前致謝。

那么QueryString屬性是只讀的,因為它不能在單個請求上更改。 顯然,瀏覽器只發送一個只有一個字符串的請求,因此只創建一個集合。 黑客使用反射(即操縱代碼和內存)來改變你無法正常改變的東西。 這個hack打破了QueryString屬性的封裝和設計。 你不應該使用它。 從設計的角度來看,沒有任何意義。 您的查詢不會更改,所以為什么要更改代表它的對象? 只有瀏覽器才能發送新的查詢字符串,因此您基本上可以使用自己的代碼來了解瀏覽器發送的內容。

如果您希望選項卡使用URL,請使用超鏈接而不是LinkBut​​ton。

從我記得的內容來看,這是所有瀏覽器都遵守的安全標准。 它的主要目的是阻止網絡釣魚攻擊,有人可以訪問網站www.MyLameWarcraftPhishingSite.com“當有人點擊頁面時,重寫網址看起來像www.blizzard.com。獲取該網址的唯一方法是實際上重定向到它。

嗯,最后的帖子是在2月11日 - 希望可以在此發布。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM