2009-04-07 36 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表达