7

我需要防止导致 URL 漏洞的字符。

我的示例 URL 是http://localhost/add.aspx?id=4;req=4

请给出我需要阻止的字符列表。

我正在使用ASP.NET网页。我正在绑定来自SQL Server数据库的信息。

我只想列出字符以远离黑客在 URL 中输入不需要的字符串。

4

4 回答 4

7

根据您使用的技术,通常有一个内置函数可以为您处理此问题。

ASP.NET (VB) 和经典 ASP

myUrl = Server.UrlEncode(myUrl)

ASP.NET (C#)

myUrl = Server.UrlEncode(myUrl);

PHP

$myUrl = urlencode($myurl);

如果您只是想删除不安全字符,则需要一个正则表达式。RFC 1738定义了哪些字符对于 URL 是不安全的:

不安全:

由于多种原因,字符可能不安全。空格
字符是不安全的,因为
当 URL 被转录或
排版或接受文字处理程序的处理时,重要的空格可能会消失,并且可能会引入无关紧要的空格。字符“<”和“>”是不安全的,因为它们被用作
自由文本中 URL 的分隔符;引号 (""")
在某些系统中用于分隔 URL。字符 "#" 是不安全的,应
始终进行编码,因为它在万维网和其他
系统中用于将 URL 与片段/锚定分隔开可能跟在它后面的标识符。字符“%”是不安全的,因为它用于
其他字符的编码。其他字符是不安全的,因为
已知网关和其他传输代理有时会修改这些字符。这些字符是“{”、“}”、“|”、“\”、“^”、“~”、“[”、“]”和“`”。

于 2009-04-07T17:14:08.200 回答
3

我需要防止导致漏洞的字符

好吧,正如答案所说,您当然需要进行 URL 编码。但是URL 编码不会导致漏洞吗?好吧,通常不是直接的;大多数情况下,当输入意外字符时,它只会使您的应用程序中断。

如果我们谈论网络“漏洞”,今天最常见的是:

  1. 服务器端代码注入,危害你的服务器
  2. SQL注入,危害你的数据库
  3. HTML 注入,允许对您的用户进行跨站点脚本(XSS) 攻击
  4. 未经验证的操作,允许对您的用户进行跨站点请求伪造(XSRF) 攻击

这些是按照严重性降低和普遍性增加的顺序。(幸运的是,如今很少有网站作者愚蠢到将用户输入传递给 system(),但 XSS 和 XSRF 漏洞很普遍。)

这些漏洞中的每一个都需要您了解潜在问题并有意识地应对它。如果您的应用程序对安全性玩弄天真,没有“您需要阻止的字符串”的神奇列表可以保护您的应用程序。有一些插件会在提交时阻止字符串“<script>”,但它们给你的只是一种错误的安全感,因为它们只能捕捉到一些常见的情况,而且通常很容易编写代码.

当您真正想要它们时,它们还会停止提交这些字符串。例如,一些(愚蠢的)PHP 作者拒绝所有传入的撇号,以试图遏制 SQL 注入;结果是你不能被称为“O'Reilly”。哦。不要阻塞;正确编码。

例如,为了防止 SQL 注入,请确保对您进行查询的任何字符串进行 SQL 转义(或使用参数化查询自动执行此操作);为了防止 HTML 注入,对您输出到页面上的所有文本字符串进行 HTML 编码(或使用会自动执行此操作的模板/MVC 方案)。

我的示例 URL http://localhost/add.aspx?id=4;req=4

该网址应该有问题吗?用';'分隔两个查询参数是有效的 而不是更常见的 '&',但遗憾的是,许多常见的 Web 框架在默认情况下仍然不理解这种语法(包括 Java Servlet 和 ASP.NET)。所以你必须使用'id=4&req=4'——或者,如果你真的希望它是一个带有分号的单个参数,'id=4%3Breq%3D4'。

于 2009-04-07T19:00:10.147 回答
2

http://en.wikipedia.org/wiki/Query_string#URL_encoding

另见:https ://www.rfc-editor.org/rfc/rfc3986#section-2.2

于 2009-04-07T17:04:29.550 回答
-2

我为漂亮的 URL 写了这个,但它当然不完整:

""",´,',·,‚,*,@,?,=,;,:,.,/,+,&,$,<,>,#,%,{,(,),}, |,,^,~,[,],-,-,-',,"

然后我翻译空格“”和“-”的重复空格。

更好的做法是这样做或将其与正则表达式结合使用。

于 2009-10-07T07:08:17.910 回答