是否可以映射网站的所有静态文件或 url 路由?
Is it possible to map all static files or url routes of a website?
我想在我的服务器中提供一些静态文件,但我不希望人们访问它,除非他们知道确切的 URL。
这意味着像游戏一样工作,解决难题并通过找出 URL 进入下一阶段。网上肯定有几个类似的游戏。
我担心的是,是否有人可以通过“映射”服务器中的所有静态文件来避免这个难题。那可能吗? [假设拼图解决方案会导致提供静态文件]
我想对 URL 路由扩展相同的问题,是否可以发现网站的所有 url 路由?
例如我有 mysite.com 和 mysite.com/hidden/solution.html 如果没有指向第二个 URL 的链接,有人能得到这个信息吗? [除了暴力破解]
我正在使用 AWS lightsail(django 和 apache)托管此页面。我 can/need 在 django/apache 方面可以做些什么来防止这种情况发生吗?
is it possible to discover all the url routes of a website? [Except bruteforcing]
没有暴力破解(或 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
这种方法的缺点是,即使用户解决了难题,他们也只能在令牌过期之前查看解决方案。
我想在我的服务器中提供一些静态文件,但我不希望人们访问它,除非他们知道确切的 URL。
这意味着像游戏一样工作,解决难题并通过找出 URL 进入下一阶段。网上肯定有几个类似的游戏。
我担心的是,是否有人可以通过“映射”服务器中的所有静态文件来避免这个难题。那可能吗? [假设拼图解决方案会导致提供静态文件]
我想对 URL 路由扩展相同的问题,是否可以发现网站的所有 url 路由? 例如我有 mysite.com 和 mysite.com/hidden/solution.html 如果没有指向第二个 URL 的链接,有人能得到这个信息吗? [除了暴力破解]
我正在使用 AWS lightsail(django 和 apache)托管此页面。我 can/need 在 django/apache 方面可以做些什么来防止这种情况发生吗?
is it possible to discover all the url routes of a website? [Except bruteforcing]
没有暴力破解(或 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
这种方法的缺点是,即使用户解决了难题,他们也只能在令牌过期之前查看解决方案。