【问题标题】:Is it possible to map all static files or url routes of a website?是否可以映射网站的所有静态文件或 url 路由?
【发布时间】:2021-05-02 02:47:07
【问题描述】:

我想在我的服务器中提供一些静态文件,但我不希望人们访问它,除非他们知道确切的 URL。

这旨在像游戏一样工作,通过找出 URL 来解决难题并进入下一阶段。网络上肯定有好几款类似的游戏。

  • 我担心的是,如果有人可以通过“映射”服务器中的所有静态文件来避免这个难题。那可能吗? [假设拼图解决方案将导致提供静态文件]

  • 我想为 URL 路由扩展相同的问题,是否可以发现网站的所有 url 路由? 例如,如果没有指向第二个 URL 的链接,我有 mysite.com 和 mysite.com/hidden/solution.html,有人可以获得此信息吗? [除了暴力破解]

我正在使用 AWS lightail(django 和 apache)托管此页面。我可以/需要在 django/apache 方面做些什么来防止这种情况发生吗?

【问题讨论】:

    标签: django apache devops nmap


    【解决方案1】:

    是否有可能发现一个网站的所有 url 路由? [除了暴力破解]

    如果没有暴力破解(或 URL 模糊测试)是不可能的,但您的用户可以共享链接,所以...


    我看到了两种方法:

    1.如果用户通过身份验证

    如果用户通过了身份验证,那么解决方案就很简单了。将已解决的谜题 ID 保存在数据库中。如果用户想查看解决方案,请检查数据库以查看用户是否已解决难题并提供响应。

    2。如果用户未通过身份验证

    您可以使用某种加密签名的令牌。当用户解决难题时,您将向他们发送一个签名令牌,这意味着 “此用户已解决此难题”。稍后,当用户想要查看解决方案时,他们需要发送令牌才能查看。

    Django's Cryptographic signing docs

    import time
    from django.core.signing import Signer
    
    signer = Signer()
    
    token = signer.sign_object({
        'solution_id': <solution-id>, # could be the name of the html file
        'expire_at': time.time() + 900 # token expiry time (15 minutes from now) 
    })
    
    print(token) # -> 'eyJtZXNzYWdlIjoiSGVsbG8hIn0:Xdc-mOFDjs22KsQAqfVfi8PQSPdo3ckWJxPWwQOFhR4'
    
    # Send the token to the client
    

    稍后如果用户想要查看/solution.html,他们需要在 url 中发送令牌。

    /solution.html?token=<token value>
    

    在您看来,您可以像这样检查令牌:

    
    token = request.GET.get('token')
    
    if not token:
        # return HTTP 403 Permission Denied
    
    try:
        data = signer.unsign(token)
    except signing.BadSignature:
        # invalid signature
        # return HTTP 403 Permission Denied
    
    # check if token expired
    if data['expire_at'] > time.time():
        # return HTTP 403
    
    # check if token's solution_id matches the requested solution
    # ...
    # return the response
    
    

    这种方法的缺点是即使用户解决了一个难题,他们也只能在令牌过期之前查看解决方案。

    【讨论】:

    • 静态文件呢,它们是否也不受“映射”影响?我知道一些较旧的页面,您通常甚至可以将静态目录作为文件夹访问。不确定我是否需要配置 apache 以防止这种情况发生,或者它是否是默认设置。谢谢@xyres
    • @Justcurious 也许X-Sendfile 可用于限制静态文件访问。看到这个:stackoverflow.com/questions/24631585/…
    • 我真的不想限制它,它们可以公开可用。我不介意人们分享网址,我只是不希望有人扫描/映射静态文件并在那里找到它。
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 2016-12-17
    • 2015-01-18
    • 2022-12-17
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多