如何传递查询参数而不在浏览器

时间:2017-05-03 09:52:24

标签: javascript backbone.js

我是BackboneJs的新手,我需要一些帮助来使用GET和Jersey在URL中传递参数。

事实上,我有以下文件表:

Document table

当我点击PDF图片时,它会使用documentID打开PDF文档。

正面(BackboneJs)

getDatas: function(e){
    var clickedEl = $(e.currentTarget);
    var id = clickedEl.attr("id");
    window.open(window.myApp.baseUrlService.defaultUrl + '/getDocument.json?an200_idDocument=' + id);
},

所以我在这里获得documentId并在后端使用它来打开文档。

背面(JAVA)

@GET
@Path("/getDocument.json")
public Response getDocumentById(@QueryParam("an200_idDocument") String idDocument){
 // my code here
}

它工作得很好但我的问题是当我打开文档时,我可以看到documentId不安全。我尝试使用@POST,但它没有用。

URL with document ID

那么,还有其他解决方案吗?

2 个答案:

答案 0 :(得分:2)

浏览器中的任何内容都应该被视为已被入侵。

JS中的任何加密都是毫无意义的,因为恶意方已经可以获得数据。

那么如何隐藏文档ID?

数据不敏感

通常,ID不是敏感信息。由于您已经将它们发送到前端以便用户能够要求提供特定文档,因此它们已经很容易获得。

考虑不要担心这些ID。

使用GUID

如果id当前是一个可猜测的序列(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 Forbidden 响应。

使用短期令牌

如果文档对于用户只能访问一次,请考虑与用户或文档关联的唯一字符串的短期令牌,它们会在X次或X次文档请求后过期。

答案 1 :(得分:0)

可悲的是,使用GET不可能完全隐藏URL的参数,这实际上是GET和POST之间的主要点之一。除非您加密这些数据以便使用GET隐藏它们或使用POST方法,否则您将没有其他解决方案。

他们之间有更多细节:https://www.w3schools.com/tags/ref_httpmethods.asp