AppEngine:键入时使页面无法访问

时间:2013-10-31 22:48:11

标签: jquery ajax google-app-engine

我正在使用Google App Engine执行以下操作:

用户点击页脚中的“给我发送电子邮件”按钮,使用以下代码将电子邮件表单加载到弹出式叠加层中:

$('#lightbox-overlay').load('/email #content')

“/ email”在调度程序中设置为Email.index,这是一个输出django表单的标准视图:

import os
import webapp2
import util
from models import EmailForm
from google.appengine.ext.webapp import template

class index(webapp2.RequestHandler):

    def get(self):
        html = "email.html"
        path = os.path.join(os.path.dirname(__file__), 'templates', html)
        self.response.headers ['Content-Type'] = 'text/html'
        self.response.write(template.render(path, {'form': EmailForm()}))

我想知道的是:除了这个jQuery请求之外,我能否让用户无法访问“/ email”?用户能够访问我正在加载它的弹出窗口之外的表单是没有意义的。

2 个答案:

答案 0 :(得分:2)

你所描述的不可能。但是,您可以生成不同的令牌并将其传递到URL上,如/ email?token = xxx并验证xxx。如果用户尝试输入just / email或带有旧令牌的URL,则会使其失败。

答案 1 :(得分:0)

jquery AJAX请求通常使用附加标头发送:

X-Requested-With: XMLHttpRequest

您可以尝试检测此标头,如果标头不存在则会失败。类似的东西:

class index(webapp2.RequestHandler):

    def get(self):
        if self.request.headers.get("x_requested_with") == "XMLHttpRequest":
            # return email form
        else:
            # return failure.

请注意,这只是一个美容措施,它不是防黑客。黑客很容易伪造标题。