2010-09-14 168 views
4

在我的網站我有一個論壇,我想避免跨站點腳本。你知道一個好的輸入驗證腳本嗎?輸入驗證檢查

+6

驗證應該(而且必須)來完成服務器端。你不能相信JavaScript。你使用哪種服務器語言? – Keeper 2010-09-14 11:41:22

+0

是文章幫助完整給你 – 2010-09-14 12:02:09

+2

@Keeper - 做服務器端驗證的絕對和一致的必要性並不禁止客戶端驗證*。 – annakata 2010-09-14 12:06:49

回答

0

這取決於你想在哪裏寫出數據。例如,當您將文本寫入輸入字段並將其簡單寫入html正文中時,您需要使用不同的過濾器。

您應該爲服務器端的不同數據類型實施不同的過濾器。我建議你應該在打印出來的時候過濾文本,而不是在用戶發送給你的時候(當然這不是關於sql注入和其他服務器端技巧),因爲(如上所述)你應該使用過濾器的類型使用取決於打印數據的位置。

如果你想寫一個非常簡單的論壇,那麼它只需要編寫一個過濾器就足夠了,只需在打印出來之前從文本中刪除所有的html標籤即可。請注意,它不適用於高級功能,例如編輯註釋,預填表格給用戶,或者用戶可以在評論中使用任何html標記等。

1

有兩種方法可以避免跨站點腳本。

  1. 濾波由用戶 (主要是腳本標記和HTML標記) 無論是在客戶端,以及對 服務器端輸入。
  2. 顯示內容爲 Html實體,以避免跨站點 腳本。當然,如果你想顯示一些 的標籤,去選項一。 否則選項二更可靠 。

您可以使用正則表達式來過濾客戶端以及服務器端的數據。

+0

我正在使用appengine,並且正在編寫python .. – arik 2010-09-14 15:46:16

+0

上述兩種方法都是獨立於語言的。在python中,用're'模塊對內容進行過濾具有良好的正則表達式支持。 – 2010-09-15 04:13:52

+0

如果您使用的是帶有appengine的Django,它默認會自動轉義HTML實體。 – 2010-09-15 04:14:38

1

我一直依賴於OWASP PHP過濾器:http://www.owasp.org/index.php/OWASP_PHP_Filters正如您從名稱中可以看出的那樣,它們是服務器端(JavaScript或HTML5驗證僅用於幫助用戶)和OWASP(Open Web Application安全項目)是一個非營利組織。

0

簡單。確保在使用它之前從輸入對象中跳出HTML。這樣,發送的數據將被視爲原始文本。做到這一點的方法是在將數據嵌入到頁面中(或以某種方式使用它)之前通過某個解析器傳遞輸入。

0

我同意anand和避免XSS的兩種主要方法:輸入驗證和輸出轉義。爲了驗證表單輸入,綁定到Django的表單驗證框架中:http://code.google.com/appengine/articles/djangoforms.html

以下是一些代碼示例,用於清除Django模板中的輸出。取而代之的是:

Welcome, {{ firstname }}! 

這樣做:

Welcome, {{ firstname|escape }}! 

這是從這個非常好的博客文章:http://startupsecurity.info/blog/2008/10/28/avoid-xss-on-google-app-engine/

0

你有兩個選項進行驗證。對於非敏感數據客戶端JavaScript可能會用到。在JavaScript中使用 ,您可以編寫簡單的函數來驗證您的數據。

對敏感數據,你應該使用服務器端腳本一樣,PHP,JSP,ASP,asp.net等

可能這會幫助你。