我希望防止未经授权的黑客/窃取web服务,该服务是由公共网站的一部分的servlet提供的。如何确保servlet仅由站点上特定url的访问者调用?
具体来说,我有两个servlet,它们一起生成一个包含自定义映像的html页面。图像参数是通过jsp和servlet1之间的交互设置的。然后从jsp中的img标记中将这些图像参数从jsp发送到servlet2。
我已经在下面列出了代码的相关部分,但我的问题是:
我的jsp看起来像是:
<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()方法,它看起来类似于:
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表单来创建新的自定义版本的图像,除非他们每次按后退按钮。
发布于 2013-08-21 06:11:19
您可以检查历史记录是否包含jsp,但我认为您要求的是如何防止跨站点脚本请求伪造(CSRF)。其中的基本内容是在jsp中包含一个隐藏的(唯一的、一次性的)密钥,然后在第二个servlet中检查该密钥。
https://stackoverflow.com/questions/18346557
复制相似问题