【问题标题】:is there any security issue if I send a path in a QueryString?如果我在 QueryString 中发送路径,是否存在任何安全问题?
【发布时间】:2016-06-20 11:37:31
【问题描述】:

如果我在 QueryString 中发送路径,是否存在任何安全问题?比如发送这个请求http://localhost/eCTDTreeViewer/Home/Index/?pathOnServer=G:\test\company2

【问题讨论】:

  • 你为什么要这样做?你想用它来达到什么目的?
  • @Haider - 提供的任何答案都回答了您的问题吗?如果是这样,您能否花时间选择最适合您的问题的答案。 :-)

标签: security http query-string


【解决方案1】:

考虑到 QueryString 的安全性,您应该记住(读作“担心”)以下几点:

  • 网址存储在网络服务器日志中
  • 网址存储在浏览器历史记录中
  • URL 在 Referrer 标头中传递

您可以在 SO 上找到有关此阅读 How secure are query strings over HTTPS 文章和 Is an HTTPS query string secure? 问题的更多详细信息。

【讨论】:

    【解决方案2】:

    鉴于文件系统不可从外部访问,暴露路径的风险可以忽略不计。

    特别是如果您所讨论的组件的唯一目的显示服务器上存在的目录。您在查询字符串中看到的内容就是您将在响应的有效负载中看到的内容,因此将路径以纯文本形式保存就可以了。

    当这个“TreeViewer”暴露敏感文件并允许用户浏览到任意位置,使他们能够检索存储在文件中的密码时,可能会出现问题。

    当然,添加 HTTPS 并没有什么坏处,但这只会阻止中间人找出该服务器上存在哪些目录和文件,并且不会提供任何额外的安全性。

    HTTPS 不会使您的安全应用程序不安全,您仍然必须实施身份验证和授权、输入卫生等。

    【讨论】:

      【解决方案3】:

      是的,您会面临Directory Traversal (DT) 和Local File Inclusion (LFI) 攻击。

      两者之间的主要区别在于 DT 是只读的,用户可以在其中访问您的 Web 服务器上的任何文件,前提是他们有足够的权限。另一方面,LFI 允许您调用 Web 服务器上的文件(例如 PHP 文件)而不是读取它。

      例如,如果您的 Web 应用程序存在 SQL Injection 漏洞,攻击者可能会在您的系统中部署 Web shell:

      SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE C:/tmp/shell.php

      然后攻击者可以调用该文件:

      http://localhost/eCTDTreeViewer/Home/Index/?pathOnServer=C:/tmp/shell.php?cmd=echo "foo"

      这很简短,但它应该提供一个关于它有多危险的好主意。

      【讨论】:

        【解决方案4】:

        如果您使用纯 HTTP,可以。该请求将通过网络以纯文本形式发送。不要混淆,在正文中包含您的信息的 POST 请求也是同样的问题。

        确保安全的好方法是使用 HTTPS。由于在交换之前进行了握手,因此完整的请求将被加密(包括路径)以发送到端点。

        【讨论】:

        • HTTPS 不会在此处添加任何相关的安全性。
        • 使用 HTTPS 查询字符串是加密发送的,因此 HTTPS 确实提供了额外的安全性。
        • HTTPS 在这里没有任何价值,攻击者仍然可以操纵pathOnServer 查询并检查响应是否存在漏洞。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 2015-04-15
        • 2017-11-29
        • 1970-01-01
        相关资源
        最近更新 更多