我正在使用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”?用户能够访问我正在加载它的弹出窗口之外的表单是没有意义的。
答案 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.
请注意,这只是一个美容措施,它不是防黑客。黑客很容易伪造标题。