Stop serving the server's own source
Nothing secret is in it — the .env never enters the image and the client is public JS regardless — but handing out server.py and the asset-pipeline scripts to anyone who guesses a filename publishes the exact validation rules for free. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3291246425
commit
20a742fbf3
1 file changed
+7
-1
@@ -91,9 +91,15 @@ class Handler(SimpleHTTPRequestHandler):
|
|||||||
self.wfile.write(body)
|
self.wfile.write(body)
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
if self.path.split('?')[0] == '/api/scores':
|
path = self.path.split('?')[0]
|
||||||
|
if path == '/api/scores':
|
||||||
with lock:
|
with lock:
|
||||||
return self.reply(200, {'scores': public(load())})
|
return self.reply(200, {'scores': public(load())})
|
||||||
|
# Don't hand out the source. Nothing secret lives in it — the .env is not in the image and
|
||||||
|
# the client is public JS regardless — but serving server.py and the asset-pipeline scripts
|
||||||
|
# to anyone who guesses the name is untidy, and it publishes the exact validation rules.
|
||||||
|
if path.endswith(('.py', '.pyc')) or '__pycache__' in path:
|
||||||
|
return self.send_error(404)
|
||||||
return super().do_GET()
|
return super().do_GET()
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
|
|||||||
Reference in new issue
Block a user