我正在处理的应用程序依赖于许多弹出窗口。那些弹出窗口依赖于查询字符串。如果有人可以在浏览器地址栏中输入网址,那么页面将抛出错误,因为查询字符串值是动态构造的。
function myFunction(id)
{
window.open("mypopup.aspx?id=" + id);
}
如果页面的请求者不是Javascript,是否有阻止页面显示的原因?如果有人输入类似的内容:
https://mycompanyname.com/path/mypopup.aspx
不应该让用户这样做。或者,至少检查请求者是否不是javascript所以我可以显示一条消息或将用户重定向到另一个页面?否则,如果没有构造请求所需的所有数据,页面将抛出异常。
感谢您的帮助。
答案 0 :(得分:1)
直接在myPopup.aspx中验证查询字符串,如果缺少某些内容,只需重定向或显示消息。
使用Request.QueryString集合在myPopup.aspx中进行验证。
据我所知,没有简单的方法可以验证请求是否来自javascript。您可以尝试创建令牌以验证发件人是您期望的那个,但如果您只需要验证参数,则无需担心谁在发送请求。
答案 1 :(得分:1)
如果两个请求来自同一个浏览器,则该页面无法区分请求的方式。
但是,您可以在查询字符串中包含以区分它们。
例如,
window.open("mypopup.aspx?request=javascript&id=" + id);
如果用户有意输入https://mycompanyname.com/path/mypopup.aspx?request=javascript
,那就这样吧。我不担心。
答案 2 :(得分:1)
弹出窗口也是浏览器窗口。因此,检查请求页面的窗口是正常窗口还是弹出窗口是很棘手的。
您应该限制用户查看弹出窗口打开的URL,您可以隐藏地址栏。因此,用户无法复制或了解网址中的内容。
window.open('/pageaddress.html','winname','directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=350');
设置基于令牌的验证。向服务器(Ajax request
)发出请求以获取随机令牌(具有一次验证机制并使其过期),您可以在查询字符串中发送令牌,并在服务器上验证它是否与发出的令牌相同。确定所请求的页面是否具有有效令牌(弹出窗口),否则拒绝请求或显示错误消息。想想captcha
如何工作,你只需要以编程方式进行。
虽然它也不是最好的解决方案,因为令牌信息可以通过网络流量跟踪器工具(如fiddler)嗅探,但它可以防止手动请求。