我是BackboneJs的新手,我需要一些帮助来使用GET和Jersey在URL中传递参数。
事实上,我有以下文件表:
当我点击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
,但它没有用。
那么,还有其他解决方案吗?
答案 0 :(得分:2)
浏览器中的任何内容都应该被视为已被入侵。
JS中的任何加密都是毫无意义的,因为恶意方已经可以获得数据。
通常,ID不是敏感信息。由于您已经将它们发送到前端以便用户能够要求提供特定文档,因此它们已经很容易获得。
考虑不要担心这些ID。
如果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