2010-12-02 39 views

回答

5

取決於上下文。

此外,編碼不僅僅是一個想法的閃光。您應該只是編碼具有特殊的含義,可用於XSS所有字符...

  • <
  • >
  • "
  • '
  • &

對於編碼小於的簡單示例無關緊要是這樣的...

歡迎來到狡猾的網站。請鏈接到您的主頁。

惡意用戶進入...

http://www.example.com" onclick="window.location = 'http://nasty.com'; return false; 

這顯然成爲...

<a href="http://www.example.com" onclick="window.location = 'http://nasty.com'; return false;">View user's website</a> 

假如你編碼的雙引號,那攻擊將是無效的。

0

如果你逃避所有的用戶輸入,你應該是安全的。

這意味着所有東西都顯示出來。即使是個人資料上的用戶名。

+1

特別是用戶名。當社交網站上的用戶能夠將JavaScript加入他的用戶名時,就會發生有趣的事情。用戶列表在這些類型的網站上顯示得相當頻繁... :-)話雖如此,你應該逃避每一個用戶輸入,或者說,每一個不可信任的輸入。 – paprika 2010-12-02 01:23:36

+0

@paprika:每個人都會受到用戶名的影響...我沒有想到這一點。 – John 2010-12-02 01:25:15

+8

你真的叫你兒子羅伯特嗎? DROP TABLE學生; - ? – eyelidlessness 2010-12-02 01:26:26

2

不需要。您必須轉義所有用戶輸入,而不管它包含什麼。

2

根據您使用的框架,許多現在有一個輸入驗證模塊。我在做演講時告訴軟件學生的一個關鍵部分是使用已經存在的輸入驗證模塊!

重新發明方向盤通常比使用已經存在的經過驗證和測試的模塊效率低。 .Net擁有你可能需要的大部分內容 - 非常容易白名單(在你知道唯一允許的輸入的地方)或黑名單(效果不如已知的'壞'東西總是改變,但仍然很有價值)

相關問題