如何防止用户直接访问我的 html 页面

How to prevent a user from directly accessing my html page

本文关键字:我的 html 页面 访问 何防止 用户      更新时间:2023-09-26

我有一个登录页面,该页面向Python脚本发送请求以对用户进行身份验证。如果未经过身份验证,则会将您重定向到登录页面。如果是将您重定向到 HTML 表单。问题是您可以通过编写 URL 来访问 HTML 表单。我如何确保用户来自使用我的 Python 脚本的登录表单,而无需使用模块,因为我无法在我的服务器中安装任何东西。我希望它严格使用Python,我不能使用PHP。可能吗?我可以使用其他方法来完成任务吗?

很明显,你只想使用 Python,没有框架等......所以问题是你实际上是重定向到一个现有的 Web HTML 页面。不要这样做,而是用Python本身来提供HTML。

# pages.py
class DefaultPage(object):
    def __init__(self):
        self.html = '''
        All Your HTML Here
        '''
    def self.display:
        return self.html

显然,你使用一些东西来服务你的Python,我假设一些简单的东西,比如Google App Engine Launcher,在这种情况下,你可以编写类。即使您使用其他一些简单的WSGI,概念也保持不变。

# main.py
import webapp2
from pages import DefaultPage
class MainHandler(webapp2.RequestHandler):
    def get(self):
        page = DefaultPage()
        self.response.write(page.display())
app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

处理用户登录的最佳方法是使用令牌作为 cookie。
用户成功登录后生成一个令牌并将其发送给他们,将此令牌保存在您的"内存"数据库中(如果您使用的是 django 服务器之类的东西)- https://docs.djangoproject.com/en/1.9/intro/tutorial01/,它会为您完成。
每次用户访问您网站中的任何内部页面时,请检查已作为cookie标头发送的用户令牌,如果在数据库中找到,则将他定向到请求的页面,否则,将他定向到登录页面。
如果您提供有关服务器(服务器类型)的更多详细信息,我可以为您提供更多帮助

您刚刚要求的称为会话管理。这是OWASP指南:https://www.owasp.org/index.php/Session_Management

你可以使用像用python编写的Django这样的框架,它已经提供了这个安全层 https://docs.djangoproject.com/en/1.9/topics/http/sessions/。

您必须添加 CSRF 保护禁止从不受信任的来源提交表单。深入了解什么是 CSRF 代币?它的重要性是什么,它是如何工作的? 问题要了解它是如何工作的,你也可以看看 CSRF 代币如何防止攻击。

你可以实现自己的csrf保护逻辑,也可以使用现有的csrf保护逻辑,如Django CSRF或Flask CSRF Protection等(这取决于你项目中使用的技术)。

确保检查 Python 中的 "referer" 标头,并验证该地址是否是您的登录页面。