在我的網站我有一個論壇,我想避免跨站點腳本。你知道一個好的輸入驗證腳本嗎?輸入驗證檢查
輸入驗證檢查
回答
這取決於你想在哪裏寫出數據。例如,當您將文本寫入輸入字段並將其簡單寫入html正文中時,您需要使用不同的過濾器。
您應該爲服務器端的不同數據類型實施不同的過濾器。我建議你應該在打印出來的時候過濾文本,而不是在用戶發送給你的時候(當然這不是關於sql注入和其他服務器端技巧),因爲(如上所述)你應該使用過濾器的類型使用取決於打印數據的位置。
如果你想寫一個非常簡單的論壇,那麼它只需要編寫一個過濾器就足夠了,只需在打印出來之前從文本中刪除所有的html標籤即可。請注意,它不適用於高級功能,例如編輯註釋,預填表格給用戶,或者用戶可以在評論中使用任何html標記等。
有兩種方法可以避免跨站點腳本。
- 濾波由用戶 (主要是腳本標記和HTML標記) 無論是在客戶端,以及對 服務器端輸入。
- 顯示內容爲 Html實體,以避免跨站點 腳本。當然,如果你想顯示一些 的標籤,去選項一。 否則選項二更可靠 。
您可以使用正則表達式來過濾客戶端以及服務器端的數據。
我正在使用appengine,並且正在編寫python .. – arik 2010-09-14 15:46:16
上述兩種方法都是獨立於語言的。在python中,用're'模塊對內容進行過濾具有良好的正則表達式支持。 – 2010-09-15 04:13:52
如果您使用的是帶有appengine的Django,它默認會自動轉義HTML實體。 – 2010-09-15 04:14:38
我一直依賴於OWASP PHP過濾器:http://www.owasp.org/index.php/OWASP_PHP_Filters正如您從名稱中可以看出的那樣,它們是服務器端(JavaScript或HTML5驗證僅用於幫助用戶)和OWASP(Open Web Application安全項目)是一個非營利組織。
簡單。確保在使用它之前從輸入對象中跳出HTML。這樣,發送的數據將被視爲原始文本。做到這一點的方法是在將數據嵌入到頁面中(或以某種方式使用它)之前通過某個解析器傳遞輸入。
我同意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/
你有兩個選項進行驗證。對於非敏感數據客戶端JavaScript可能會用到。在JavaScript中使用 ,您可以編寫簡單的函數來驗證您的數據。
對敏感數據,你應該使用服務器端腳本一樣,PHP,JSP,ASP,asp.net等
可能這會幫助你。
- 1. 輸入驗證:檢查多個值
- 2. C#輸入驗證檢查正數
- 3. ISBN檢查器 - 驗證用戶輸入
- 4. jQuery驗證插件,檢查輸入defaultValue
- 5. 驗證(檢查)輸入的路徑
- 6. php輸入驗證檢查和simplexml_load_string
- 7. 使用scanf驗證輸入(檢查輸入是char還是int)
- 8. jQuery驗證 - 檢查複選框時檢查輸入值
- 9. C輸入檢查和以前的輸出驗證代碼
- 10. 驗證輸入
- 11. 驗證輸入
- 12. 輸入驗證
- 13. 驗證輸入
- 14. Laravel檢索並驗證多個輸入
- 15. 如何跳過ActiveRecord中的驗證檢查(甚至沒有輸入驗證檢查)?
- 16. 檢查是否一個輸入是空的(驗證表單)
- 17. 如何驗證/檢查輸入時間大於oracle中的sysdate
- 18. 多個文本框輸入驗證檢查
- 19. 用於數字檢查的文本輸入驗證
- 20. 檢查或驗證表單輸入以某個字母開頭
- 21. 如何檢查Java中的用戶輸入驗證?
- 22. 範圍驗證器 - 檢查整數範圍時輸入字母
- 23. 輸入日期驗證檢查調用to_date
- 24. 如何驗證Python的檢查沒有用戶輸入
- 25. AngularJS驗證不檢查步驟HTML數字輸入的限制
- 26. Jquery驗證器插件不檢查新輸入
- 27. 如何檢查輸入驗證等於「0」,只有「0」?
- 28. Codeigniter坦克驗證檢查用戶輸入的密碼
- 29. jQuery的驗證 - 檢查輸入違反公認的價值
- 30. 驗證以檢查之前的空輸入類型
驗證應該(而且必須)來完成服務器端。你不能相信JavaScript。你使用哪種服務器語言? – Keeper 2010-09-14 11:41:22
是文章幫助完整給你 – 2010-09-14 12:02:09
@Keeper - 做服務器端驗證的絕對和一致的必要性並不禁止客戶端驗證*。 – annakata 2010-09-14 12:06:49