Javascript 如何在不在浏览器中显示的情况下传递查询参数
我是BackboneJs的新手,我需要一些帮助来使用GET with Jersey在URL中传递参数 事实上,我有如下文件表: 当我单击PDF picto时,它会使用Javascript 如何在不在浏览器中显示的情况下传递查询参数,javascript,backbone.js,Javascript,Backbone.js,我是BackboneJs的新手,我需要一些帮助来使用GET with Jersey在URL中传递参数 事实上,我有如下文件表: 当我单击PDF picto时,它会使用documentID打开PDF文档 正面(后身) 因此,这里我得到了documentId,并在后端使用它来打开文档 背面(JAVA) 它工作得很好,但我的问题是,当我打开文档时,我可以看到documentId,这是不安全的。我尝试了@POST,但没有成功 那么,还有其他解决方案吗?遗憾的是,不可能使用GET完全隐藏URL的参数,
documentID
打开PDF文档
正面(后身)
因此,这里我得到了documentId
,并在后端使用它来打开文档
背面(JAVA)
它工作得很好,但我的问题是,当我打开文档时,我可以看到documentId
,这是不安全的。我尝试了@POST
,但没有成功
那么,还有其他解决方案吗?遗憾的是,不可能使用GET完全隐藏URL的参数,这实际上是GET和POST之间的一个要点。除非您加密这些数据以便使用GET或使用POST方法隐藏它们,否则您将没有其他解决方案
它们之间的更多细节:遗憾的是,不可能使用GET完全隐藏URL的参数,这实际上是GET和POST之间的一个要点。除非您加密这些数据以便使用GET或使用POST方法隐藏它们,否则您将没有其他解决方案
他们之间的更多详细信息:浏览器中的任何内容都应被视为已被破坏。 JS中的任何加密都是毫无意义的,因为恶意方已经可以使用数据 那么如何隐藏文档id呢? 数据不敏感 通常,ID不是敏感信息。由于您已经将它们发送到前端,以便用户能够请求特定文档,因此它们已经很容易获得 考虑一下不要担心这些ID 使用GUID
如果IDS是当前可猜测的序列(1, 2, 3等),并且用户没有登录,意味着URL是公共可访问的,考虑将GUID存储在数据库中,并使用它来标识它们。
/getDocument.json?an200_idDocument=123e4567-e89b-12d3-a456-426655440000
人们猜测GUID的可能性要小得多
例如,通过使用类别名称空间或用户ID(如果用户已登录应用程序)使这些机会接近于零
/getDocument.json?cat=bills&an200_idDocument=123e4567-e89b-12d3-a456-426655440000
按对象检查权限
如果用户已登录,请在返回响应之前检查他是否有权从后端访问文档。如果他没有访问权限,则返回403禁止响应
使用短期代币
如果一个用户只能访问一次文档,请考虑短命令牌,这些标记是与用户或文档相关联的唯一字符串,它们在X次或X文档请求之后到期。
< P> <强>浏览器中的任何东西都应该被认为是妥协了。< /强> JS中的任何加密都是毫无意义的,因为恶意方已经可以使用数据 那么如何隐藏文档id呢? 数据不敏感 通常,ID不是敏感信息。由于您已经将它们发送到前端,以便用户能够请求特定文档,因此它们已经很容易获得 考虑一下不要担心这些ID 使用GUID如果IDS是当前可猜测的序列(1, 2, 3等),并且用户没有登录,意味着URL是公共可访问的,考虑将GUID存储在数据库中,并使用它来标识它们。
/getDocument.json?an200_idDocument=123e4567-e89b-12d3-a456-426655440000
人们猜测GUID的可能性要小得多
例如,通过使用类别名称空间或用户ID(如果用户已登录应用程序)使这些机会接近于零
/getDocument.json?cat=bills&an200_idDocument=123e4567-e89b-12d3-a456-426655440000
按对象检查权限
如果用户已登录,请在返回响应之前检查他是否有权从后端访问文档。如果他没有访问权限,则返回403禁止响应
使用短期代币
如果一个用户只能访问一次文档,请考虑短命令牌,这些令牌是与用户或文档相关联的唯一字符串,它们在X次或X文档请求之后到期。
谢谢,实际上,当我尝试@ POST时,它不起作用。我将尝试加密Id。如果不需要高级加密,我建议您在此处查看:。在JavaScript中很容易实现。谢谢你,当我尝试@POST时,它并没有起作用。我将尝试加密Id。如果不需要高级加密,我建议您在此处查看:。在JavaScript中很容易实现。@POST
“不起作用”是什么?@peeskillet我可以传递id,但是当我打开文档时,我得到了javax.ws.rs.NotAllowedException:HTTP 405方法不允许当你说“打开文档”时,
,。你是说你只是在浏览器中键入URL?如果是这样的话,那当然行不通。浏览器URL栏的默认方法是GET(因此“不允许使用方法”)。您需要从Javascript发出POST请求;和XHR(AJAX)请求)。如果不想,还可以从POST端点重定向到另一个GET端点。不确定你到底想做什么。如果对你来说更安全的话,你也可以发出一个GET请求并在标题中设置ID。在控制台中,我得到了红色pdf的二进制数据。从安全角度来看,试图隐藏ID是毫无意义的,因为它已经对用户可用。前端(主干应用程序)中的所有内容都应被视为不安全数据。@POST
“不起作用”的原因是什么?@peeskillet我可以传递id,但当我打开文档时,我得到了javax.ws.rs.notallowedexep
getDatas: function(e){
var clickedEl = $(e.currentTarget);
var id = clickedEl.attr("id");
window.open(window.myApp.baseUrlService.defaultUrl + '/getDocument.json?an200_idDocument=' + id);
},
@GET
@Path("/getDocument.json")
public Response getDocumentById(@QueryParam("an200_idDocument") String idDocument){
// my code here
}