2009-06-03 101 views
6

我将URL存储在数据库中,我希望能够知道两个URL是否相同。从URL中删除尾部斜杠总是安全的吗?

通常,最后的斜杠不会改变您从服务器获得的响应。 (即http://www.google.com/http://www.google.com相同)

我是否可以始终盲目地从任何URL中删除末尾的斜杠而不查看任何内容?
安全吗?

我的意思是“不看任何东西”是,我会从删除斜杠:
http://www.google.com/q?xxx=something&yyy=something/

我知道web服务器可以,如果理论上回报完全不同的东西,它希望和我知道有时去一个没有斜杠的URL会重定向到斜杠。我唯一的意图是确定两个URL是否相同。

此方法是否安全?

+2

虽然不一定是“资源”,但XML命名空间非常特别*关于尾部斜线或非斜线。 – 2012-01-26 23:16:10

回答

18

不,它并不总是安全的。一个Web服务器可以解释它喜欢的URL的路径部分。如果不使用URL上的GET或HEAD,你就无法知道它会做什么(解析URI)。

+0

谢谢。我一直在查看数据库,幸运的是,我确认这不是问题。提交的所有网址都被我们拥有的小书签代码抓取,并且正如我所怀疑的那样,除了尾部斜线之外,不可能有2个用户拥有相同的网址。或者至少,它还没有发生:-)。 – 2009-06-03 04:12:51

+1

而且,IIRC中,URL规范特别指出以斜杠结尾的URL表示目录,而不表示文档。许多Web服务器将重定向到或返回前者的默认文档,并为后者返回401(我知道我的做法)。 – 2009-06-03 05:25:26

+1

URL规范讨论了分层URL方案 - 像FOO://而不是像BAR那样的那样:等等。一些层次结构的知识就像http,ftp一样熟知,但是你仍然无法判断/最终是否有意义,这是服务器解释的结果,这可能取决于操作系统,服务器软件实现和其他方面。 – dajobe 2009-06-03 06:41:56

4

不。我遇到过这样的情况,根据.htaccess文件中的设置,某些目录或“干净URL”(例如由CMS生成的URL)无法在没有结尾斜杠的情况下访问。这很少见,这可能是网站管理员的错误,但可能会发生。

6

它可能是安全的,你会得到相同的响应有或没有结尾的斜线(我不能保证是真的),但他们肯定意味着不同的事情。考虑一个引用目录的URL,或者该网站作为目录提供的内容。使用网址

http://www.somesite.com/directory/ 

...明确表示您要查找目录。如果你砍掉的斜线:

http://www.somesite.com/directory 

...该网站的打算以此为一个名为“目录”的文件的请求,并得到所有困惑了片刻。它可能会将此解释为对目录的请求,但含义并不相同,并且您可能得不到您的期望。

查看this article了解更多详情。

+0

另外,在** RFC 3986 **中,参见[6.2.4。基于协议的规范化](http://tools.ietf.org/html/rfc3986#section-6.2.4)。网络蜘蛛可能试图确定这两者是否相同。 – DavidRR 2014-10-15 20:51:26

0

正如其他人所指出的,它并不总是安全的。如果它能为你工作,我的建议是将URL存储在斜线处,并在你做比较时将它们去掉。你会受到性能影响,但我认为这比发送错误的网页更好。

+0

如果您不想在比较时进行处理,则可以将规范形式的实际URL和URL存储起来。时空权衡。 – Chuck 2009-06-03 02:38:42