【问题标题】:Is it always safe to remove a trailing slash from a URL?从 URL 中删除尾部斜杠总是安全的吗?
【发布时间】:2010-10-30 21:00:38
【问题描述】:

我将 URL 存储在数据库中,我想知道两个 URL 是否相同。

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

我是否总是盲目地从任何 URL 中删除尾部斜杠,而不查看任何内容?
那安全吗?

我所说的“不看任何东西”的意思是我会从以下位置删除斜线:​​
http://www.google.com/q?xxx=something&yyy=something/

我知道网络服务器可以理论上根据需要返回完全不同的内容,而且我知道有时访问不带斜线的 URL 会重定向到带斜线的 URL。我在这里的唯一目的是确定两个 URL 是否相同。

这种方法安全吗?

【问题讨论】:

  • 虽然不一定是“资源”,但 XML 命名空间对于尾部斜杠或非斜杠非常特殊

标签: database url


【解决方案1】:

不,它并不总是安全的。 Web 服务器可以随意解释 URL 的路径部分。如果不对 URL 使用 GET 或 HEAD,您将无法判断它会做什么(解析 URI)。

【讨论】:

  • 谢谢。我一直在查看数据库,幸运的是,我确认这不是问题。提交的所有 URL 都由我们拥有的书签代码抓取,并且正如我所怀疑的,除了尾部斜杠之外,2 个用户不可能拥有相同的 URL。或者至少,它还没有发生:-)。
  • 而且,IIRC,URL 规范明确指出,以斜杠结尾的 URL 表示目录,而没有表示文档。许多网络服务器会重定向到或返回前者的默认文档,并为后者返回 401(我知道我的)。
  • URL 规范讨论了分层 URL 方案 - 像 FOO:// 这样的方案,而不是像 BAR:blah 这样的方案。一些分层的,如 http、ftp 是众所周知的,但你仍然无法判断 / 到底是否有意义,它是由服务器解释的,这可能取决于操作系统、服务器软件实现和其他东西。
【解决方案2】:

从某种意义上说,无论是否带有斜杠,您都会得到相同的响应,这可能是安全的(我不能保证这是真的),但它们肯定意味着不同的东西。考虑一个引用目录的 URL,或者站点作为目录呈现的东西。使用网址

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

...清楚地表明您要的是目录。如果你砍掉尾部的斜线:

http://www.somesite.com/directory

...该站点会将其视为对名为“目录”的文件的请求,并且会一时感到困惑。它可能会将此解释为对目录的请求,但含义并不相同,您可能无法得到预期的结果。

更多详情请参阅this article

【讨论】:

【解决方案3】:

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

【讨论】:

    【解决方案4】:

    正如其他人所指出的,它并不总是安全的。如果它对您有用,我的建议是存储带有斜杠的 URL,并在您进行比较时将其去掉。你会受到性能影响,但我认为这比将某人发送到错误的网页要好。

    【讨论】:

    • 如果您不想在比较时进行处理,或者以规范形式存储实际 URL 和 URL。时空权衡。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    相关资源
    最近更新 更多