首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止未经授权访问由servlet定义的web服务

问防止未经授权访问由servlet定义的web服务
EN

Stack Overflow用户
提问于 2013-08-20 23:29:07
回答 1查看 757关注 0票数 2

我希望防止未经授权的黑客/窃取web服务,该服务是由公共网站的一部分的servlet提供的。如何确保servlet仅由站点上特定url的访问者调用?

具体来说,我有两个servlet,它们一起生成一个包含自定义映像的html页面。图像参数是通过jsp和servlet1之间的交互设置的。然后从jsp中的img标记中将这些图像参数从jsp发送到servlet2。

我已经在下面列出了代码的相关部分,但我的问题是:

  1. 我可以在下面的servlet2 doGet()中添加什么来确保servlet2 doGet() 如果访问我的网站的访问者从my.jsp调用了它,那么运行吗?
  2. 我可以对jstl或者下面的my.jsp的其他部分做些什么来保护 阻止未经授权的呼叫servlet2?
  3. 我还能做什么来防止对servlet2的未经授权的调用?

我的jsp看起来像是:

代码语言:javascript
复制
<form method="post">   
    <img src="url-pattern-for-servlet2?a=${param.a}&b=${param.b}" />  
    <input type="text" name="a" value="${empty param.a ? '5' : param.a}" size="15" />  
    <input type="text" name="b" value="${empty param.b ? '7' : param.b}" size="15" />  
    <input type="submit" name="submit-button" value="click here" />  
</form>  

Servlet1有一个doPost()方法,它通过检查错误来处理表单输入,然后调用jsp.forward(request,response)返回html,其中包含img标记src属性,其中填充了medi.a和medi.b的值。

Servlet2有一个doGet()方法,它看起来类似于:

代码语言:javascript
复制
String a = req.getParameter("a");  
String b = req.getParameter("b");  
//some code to create myBufferedImage using a and b  
resp.setContentType("image/gif");//256 colors  
ImageIO.write(myBufferedImage,"gif",resp.getOutputStream());  

需要两个servlet的系统,这样就可以将生成的映像嵌入到html页面中的img标记中。如果我只做了一个servlet,web表单将只生成一个图像,最终用户将无法继续使用web表单来创建新的自定义版本的图像,除非他们每次按后退按钮。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 06:11:19

您可以检查历史记录是否包含jsp,但我认为您要求的是如何防止跨站点脚本请求伪造(CSRF)。其中的基本内容是在jsp中包含一个隐藏的(唯一的、一次性的)密钥,然后在第二个servlet中检查该密钥。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18346557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档