我有一个登录页面,它向Python脚本发送请求以验证用户身份。如果未经过身份验证,则会将您重定向到登录页面。如果它将您重定向到HTML表单。问题是您可以通过编写URL来访问HTML表单。如何在不使用模块的情况下确保用户使用我的Python脚本来自登录表单,因为我无法在服务器中安装任何内容。我希望它严格地使用Python我不能使用PHP。可能吗?我可以使用其他方法来完成任务吗?
答案 0 :(得分:1)
我很明显你只想使用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)
答案 1 :(得分:0)
处理用户登录的最佳方法是使用令牌作为cookie
用户成功登录后生成令牌并将其发送给他们,将此令牌保存在内存中#34;数据库(如果您使用的是django服务器) - https://docs.djangoproject.com/en/1.9/intro/tutorial01/,它会为您完成
每次用户访问您网站中的任何内部页面时,请检查已作为cookie标头发送的用户令牌,如果在您的数据库中找到,则将其指向所请求的页面,否则,将其指向登录页面。
如果您提供有关服务器的更多详细信息(服务器类型),我可以为您提供更多帮助
答案 2 :(得分:0)
您刚才要求的是会话管理。以下是OWASP指南:https://www.owasp.org/index.php/Session_Management
你可以使用像python编写的框架,它已经提供了这个安全层。 https://docs.djangoproject.com/en/1.9/topics/http/sessions/
答案 3 :(得分:0)
您必须将 CSRF保护添加到禁止表单,以便从不受信任的来源提交。深入了解What is a CSRF token ? What is its importance and how does it work?问题以了解其工作原理,您也可以查看How does a CSRF token prevent an attack。
您可以实现自己的csrf保护逻辑或使用现有的csrf保护逻辑,如Django CSRF或Flask CSRF Protection等。(这取决于您项目中使用的技术)。
答案 4 :(得分:-2)
确保在Python中检查“referer”标头,并验证该地址是否为您的登录页面。