2009-04-07 149 views
5

我需要防止的是,在URL什麼字符在查詢字符串中不安全?

我的樣本網址http://localhost/add.aspx?id=4;req=4

請給我需要的塊中文字的名單引起vulnerablities的字符。

我正在使用ASP.net網頁。我綁定了來自sql server數據庫的信息。

我只是想列出的人物,從黑客遠離url中

+2

請不要標記否定的評價結合起來,直到有人回答。如果你不知道確切的答案,請留下它。 – 2009-04-07 17:13:57

+0

您需要提供更多信息。這實際上取決於數據的使用方式。例如,如果您拉動id的值併爲MSSQL生成一個動態sql查詢,那麼這將會不同,那麼,如果您在執行LDAP查找等。 – JoshBerke 2009-04-07 17:14:49

+0

@Josh添加更多信息 – 2009-04-07 17:18:39

回答

6

取決於你使用什麼樣的技術,有通常是一個內置的函數,將爲您處理這個問題。

ASP.NET(VB)&經典ASP

myUrl = Server.UrlEncode(myUrl) 

ASP.NET(C#)

myUrl = Server.UrlEncode(myUrl); 

PHP

$myUrl = urlencode($myurl); 

如果您只是想刪除不安全字符,您將需要一個正則表達式。 RFC 1738定義哪些字符是不安全的網址:

不安全:

字符可以是不安全的 幾個原因。空間
字符是不安全的,因爲 顯著空間可能會消失,並且可以被引入
微不足道的空間時的URL被轉錄或
排版或經受的文字處理程序的處理 。 字符「<」和「>」不安全 ,因爲它們被用作自由文本URL周圍的
分隔符; 的引號(「」「)用於
在某些系統中分隔網址。該 ‘#’字符是不安全的,應該
始終編碼,因爲它是在萬維網和其他
系統中使用 以便從 分段/錨點標識符中劃分出一個URL,該 可能跟隨它。字符「%」爲 不安全,因爲它用於
其他字符的編碼。其他 字符是不安全的,因爲
網關和其他傳輸代理 已知有時會修改這樣的 字符。這些字符是「{」, 「}」,「|」,「\」,「^」,「〜」,「[」,「]」, 和「`」。

+0

@Terrapin我需要過濾一些不需要的字符,不需要我編碼。請建議 – 2009-04-07 17:15:13

+0

如果您想完全填寫不良字符,則需要使用正則表達式。如果您只想將這些字符翻譯(編碼)爲安全字符,請使用URL編碼。 – Seibar 2009-04-07 17:16:47

+0

@Terrapin。我寫了這些用空字符串替換( -^{} []; $ = *'#| @'\ <>()+,\\)。請檢查這是否正確 – 2009-04-07 17:17:55

3

我需要防止造成vulnerablities

當然,你需要 URL編碼的好角色,因爲答案已經說。但是不是 URL編碼導致漏洞?通常不是直接的;大多數情況下只會在輸入意外字符時使應用程序中斷。

如果我們談論網絡的脆弱性「,最常見的今天:

  1. 服務器端code injection,影響您的服務器
  2. SQL injection,影響您的數據庫
  3. HTML注入,允許對您的用戶執行cross-site scripting(XSS)攻擊
  4. 未經驗證的操作,允許對您的用戶執行cross-site request forgery(XSRF)攻擊

這些是按照嚴重性下降和共同性增加的順序。 (幸運的是,很少有網站作者愚蠢到現在將用戶輸入傳遞給system(),但XSS和XSRF漏洞十分普遍。)

這些漏洞都要求您理解底層問題並故意應付。沒有「需要阻止的字符串」的魔術列表,它可以保護您的應用程序,如果它對安全性玩的天真。有一些附加組件,它們在提交時會阻止字符串'< script>',但它們給你的只是一種錯誤的安全感,因爲它們只能捕獲一些常見情況,並且通常很容易編碼周圍。

當你可能真正想要他們時,他們也會停止提交這些字符串。例如,一些(愚蠢的)PHP作者拒絕所有傳入的撇號作爲遏制SQL注入的嘗試;結果是你不能稱之爲「O'Reilly」。 D'哦。不要阻止;編碼正確。例如,要防止SQL注入,請確保SQL轉義您正在查詢的任何字符串(或使用參數化查詢自動執行此操作);爲了防止HTML注入,HTML編碼您輸出到頁面上的所有文本字符串(或使用自動執行此操作的模板/ MVC方案)。

我的樣本網址http://localhost/add.aspx?id=4;req=4

是否有應該是蹊蹺的是網址?用';'分隔兩個查詢參數是有效的,而不是更常見的'&',但許多常見的web框架在默認情況下(包括Java Servlet和ASP.NET)仍然不能理解這種語法。所以你必須使用'id = 4 & req = 4' - 或者,如果你真的希望它是一個帶有文字分號的單一參數,'id = 4%3Breq%3D4'。

-2

我寫這一點,漂亮的URL,但它當然無法完成

「」」,',',·,,,*,@,=,;,:,,/, +,&,$,<,>,#,%,{(,),},|,\,^,〜,[,] ,, - , - 」 ,,」

,然後我「並重復空間」空間轉換「 - 」

更好的事情是做或reqular表達

相關問題