2008-11-11 74 views
1

ASP(VBScript)中用於輸入處理的最佳方式(或至少最常見的方式)是什麼?我主要關注的是注入HTML/JavaScript注入&。是否有一些相當於PHP的htmlspecialcharsaddslashes,等等?或者我必須手動使用類似字符串替換功能的東西嗎?如何防止ASP/VBScript中的注入?

回答

5

底線是這樣的:

  1. 總是HTML編碼用戶輸入你寫你的頁面之前。 Server.HTMLEncode()是爲你做的。
  2. 始終使用參數化查詢來與數據庫接口。 ÀDODB.CommandADODB.CommandParameter對象在這裏是正確的選擇。
  3. 始終在呈現頁面的IIS服務器上使用URLScan實用程序和IIS鎖定,除非它們是版本6或更高,不再需要這些工具。

如果你堅持要點1和2 slavishly,我想不出多少可以出錯。

大多數漏洞來自未正確編碼用戶輸入或從其構建SQL字符串。如果出於某種原因,HTML編碼用戶輸入以您的方式發揮作用,那麼您的應用程序中發現了一個設計缺陷。

+0

如果您的表單接受了將通過網絡以外的其他媒介發佈的內容 - 例如雜誌,該怎麼辦?那麼你不會想要HTML編碼的字符。有時候,如果你不知道它會在什麼時候結束,那麼輸入必須儘可能保持乾淨和原始。 – 2008-12-08 16:13:08

2

我會添加到Tomalaks列表另一點。

避免在SQL代碼中使用字段值的串聯。也就是說,在某些情況下,存儲過程可能會在字符串中構建一些SQL以便隨後執行。這是沒有問題的,除非使用文本字段值作爲其構造的一部分。

命令參數可以保護旨在將值從劫持輸入執行不需要的SQL的SQL代碼,但它允許這種不需要的SQL成爲數據庫中的數據。這是第一級的可調性。如果該字段的值在存儲過程中的某個SQL字符串連接中使用,則存在二級注入緩衝區。

另一個考慮因素是這只是最小的保護。它所做的一切都是爲了使攻擊企圖無害。然而,在許多情況下,最好添加一個防止這種數據輸入altogther和/或改變管理員進行潛在注入攻擊的系統。

這是輸入驗證變得重要的地方。我不知道有任何工具可以幫助你,但是一些簡單的正則表達式可能會有所幫助。例如,「< \ w +」會檢測到在該字段中包含HTML標記的嘗試。