2010-08-20 29 views
1

在这里仍然在学习JSP Web应用程序。Servlet参数加密

我一直在我的web应用程序中做了一段时间,但我想知道一个更安全的解决方案。

想象一下显示某些图书信息的表格。当用户点击表格中的其中一行时,我基本上会将BookID和url一起发送。

示例URL。 http://locathost:8080/myapp/editbook.htm?bookID=3

在我的servlet中。

String strBookID = request.getParameter("bookID"); 

我觉得这有点弱,有没有办法可以提供比这更安全的方式。 如果我将BookID与URL一起发送,那么黑客更容易编辑该URL。

你能告诉我一些关于如何在客户端和服务器端做到这一点的链接?

谢谢

回答

2

我认为这是一个有点弱,是有办法,我可以提供除此之外的更安全的方式。

您必须根据您的应用程序定义“安全”。对于销售书籍的公共网站或私人图书馆托管机密卷或任何其他应用程序之间的要求完全不同。

至少,你应该做到以下几点 -

  1. 验证BOOKID实际上是一个整数,在预期范围之内。
  2. 确保您在参数化SQL查询中绑定 bookid - 这是为了防止SQL注入。
  3. 显示一个“图书未找到”页面,如果这本书不能找到

对于一个公共网站,上面是不够的。你实际上希望人们发现你的书,所以如果有人修改了bookID,你就不应该在意。

对于一个安全的库,你必须做更多。

  1. 确保该URL是在web.xml中保护,因此只有经过身份验证和授权的用户才能查看网址
  2. 验证当前用户有权访问的BOOKID。您可以在会话对象中存储可供用户使用的书籍列表。
  3. 如果用户无权访问,则返回403错误页面。

还有其他几种策略来保护URL;有些使用令牌来确保URL没有被操纵。其他人不会将bookID发送给客户端,而是依赖于编号{1到n},其中只有服务器知道1对应于Book A等等。但是,这个想法是确保用户无法访问他没有权限的图书。

如果你使用Spring,我会强烈推荐Spring Security。否则看看JAAS。

0

你必须假设任何用户都可以向你发送任何东西。解决方案并不是避免用户通过URL发送数据,而是控制他们实际上可以执行以下操作。

您需要身份验证和授权。

How to use authentication with your web.xml

Defining Security Requirements for Web Applications

+0

很快。我并没有真正阅读过有关安全性的内容,并会浏览稍后给出的链接。但是我创建了一个拦截所有请求并检查会话中的对象的Servlet过滤器。 这是我成功登录后的第一个认证方案。 我想知道,我访问过的网站如何创建[http://somesite/app.htm?id = 3748asghks373] 这样的链接我认为他们在这里进行某种加密。我对吗? – 2010-08-20 08:14:42

+0

这不是一种真正的加密,它更像是一张访问资源的票据。但是通过这种链接,用户不能交换链接来共享信息。 想这样: 如果在amazon.com(或任何其他网站)链接都是这样的话会怎么样。如果您无法交换您正在阅读的信息,该怎么办? 如果你真的不想分享信息,你仍然可以使用标题为“对于这张票,如果用户是他假装是他的人,那么价值将是...”的票证。“ 但它是真的沉重的你给我们的用例(只是编辑一些信息)。 – 2010-08-20 08:30:31