我们有一个网站,允许用户使用隐藏的输入进行登录,以便在HTML表单中传递username
和password
,如下所示(我知道它不安全,但是'我被要求做什么:-()。
<form method="post" action="https://...">
<input name="username" value="..." type="hidden">
<input name="password" value="..." type="hidden">
<input type="submit" value="submit">
</form>
如果HTML文件保存为本地HTML文件,我可以通过提交表单成功登录(浏览器中显示的URL为file:///.../xxx.html
)。
但是,如果我使用GAE SDK呈现HTML文件,我无法登录,网站抱怨我尝试通过未知来源登录(浏览器中显示的网址为http://localhost:8080/
)。
如果我将系统部署到GAE基础架构,我也无法登录,使用与上面相同的错误消息(浏览器中显示的URL为http://xxxxx.appspot.com
)。
我想知道本地HTML表单和网站呈现表单之间的区别。
如何从网站呈现的表单中启用日志记录?
答案 0 :(得分:1)
重要的部分是您的浏览器和您正在使用的日志服务之间的最终HTTP通信,表单帖子将转换为最后的。要查看任何差异,您可以使用任何浏览器(Google-&gt; View-&gt;开发者 - &gt;开发人员工具),并在提交表单时查看网络活动。您会注意到从文件发出的POST和由本地或云服务器(如Google SDK或Google App Engine)提供的文件发出的POST之间存在一些差异,我做了一个快速测试,主要区别在于:
从文件发帖时:
产地:空
当从服务器的html POSTING时:
Origin:http://localhost:26124
Referer:http://localhost:26124/testform/
从服务器端的角度来看,您可以设置一个模型POST监听器(我在SDK上做过),这是代码:
class TestFormHandler(BaseHandler):
def get(self):
form = """
<form method="post" action="">
<input name="username" value="valueusernamme" type="hidden">
<input name="password" value="valuepassword" type="hidden">
<input type="submit" value="submit">
</form>
"""
self.response.out.write(form)
def post(self):
logging.info(self.request.body)
logging.info(self.request.headers)
logging.info(self.request.params)
logging.info(self.request.cookies)
然后使用带有表单的文件(确保表单操作是本地或云服务localhost和端口的地址,如果它来自您自己的计算机),或访问您设置的服务(返回的GET处理程序)以前的表格)。
打印出以下形式的正文,标题,参数和饼干后:
使用文件POST:
username=valueusernamme&password=valuepassword
{'X-Appengine-Country': 'ZZ', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'es-419,es;q=0.8,en;q=0.6', 'Content_Length': '46', 'Content-Length': '46', 'Content_Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.69 Safari/537.36', 'Host': 'localhost:26124', 'Origin': 'null', 'Pragma': 'no-cache', 'Cookie': 'dev_appserver_login="test@example.com:True:185804764220139124118"; PHPSESSID=f87c32d417539f8d2903ac76dc5fef1f; language_id=1; __atuvc=0%7C43%2C1%7C44%2C8%7C45%2C0%7C46%2C54%7C47; session=eyJfY3NyZl90b2tlbiI6IjVzcVhEayJ9|1418620181|f01cc7c352763ebe30a0c1d2a34f063112641bbd; _ga=GA1.1.629360734.1406657652; hl=es_ES', 'Cache-Control': 'no-cache'}
UnicodeMultiDict([(u'username', u'valueusernamme'), (u'password', '******')])
UnicodeMultiDict([(u'__atuvc', u'0%7C43%2C1%7C44%2C8%7C45%2C0%7C46%2C54%7C47'), (u'PHPSESSID', u'f87c32d417539f8d2903ac76dc5fef1f'), (u'dev_appserver_login', u'test@example.com:True:185804764220139124118'), (u'session', u'eyJfY3NyZl90b2tlbiI6IjVzcVhEayJ9|1418620181|f01cc7c352763ebe30a0c1d2a34f063112641bbd'), (u'_ga', u'GA1.1.629360734.1406657652'), (u'language_id', u'1'), (u'hl', u'es_ES')])
使用服务器提供的文件:
username=valueusernamme&password=valuepassword
{'X-Appengine-Country': 'ZZ', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'es-419,es;q=0.8,en;q=0.6', 'Content_Length': '46', 'Content-Length': '46', 'Referer': 'http://localhost:26124/testform/', 'Content_Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.69 Safari/537.36', 'Host': 'localhost:26124', 'Origin': 'http://localhost:26124', 'Pragma': 'no-cache', 'Cookie': 'dev_appserver_login="test@example.com:True:185804764220139124118"; PHPSESSID=f87c32d417539f8d2903ac76dc5fef1f; language_id=1; __atuvc=0%7C43%2C1%7C44%2C8%7C45%2C0%7C46%2C54%7C47; session=eyJfY3NyZl90b2tlbiI6IjVzcVhEayJ9|1418620181|f01cc7c352763ebe30a0c1d2a34f063112641bbd; _ga=GA1.1.629360734.1406657652; hl=es_ES', 'Cache-Control': 'no-cache'}
UnicodeMultiDict([(u'username', u'valueusernamme'), (u'password', '******')])
UnicodeMultiDict([(u'__atuvc', u'0%7C43%2C1%7C44%2C8%7C45%2C0%7C46%2C54%7C47'), (u'PHPSESSID', u'f87c32d417539f8d2903ac76dc5fef1f'), (u'dev_appserver_login', u'test@example.com:True:185804764220139124118'), (u'session', u'eyJfY3NyZl90b2tlbiI6IjVzcVhEayJ9|1418620181|f01cc7c352763ebe30a0c1d2a34f063112641bbd'), (u'_ga', u'GA1.1.629360734.1406657652'), (u'language_id', u'1'), (u'hl', u'es_ES')])
某些服务检查请求的来源并可以使用Origin或Referer过滤访问,我会尝试查看日志服务,以确定他们是否有这方面的内容。