gpt4 book ai didi

java - 防止未经授权访问由 servlet 定义的 Web 服务

转载 作者:行者123 更新时间:2023-11-30 11:29:25 25 4
gpt4 key购买 nike

我想防止对作为公共(public)网站一部分的 servlet 提供的 Web 服务进行未经授权的黑客攻击/窃取。我如何确保 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 看起来像这样:

<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 属性由 param.a 和 param 的值填充。 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 表单来创建新的图像自定义版本,除非他们每次都点击后退按钮。

最佳答案

您可以检查历史记录是否包含您的 jsp,但我认为您要求的是如何防止跨站点脚本请求伪造 https://www.owasp.org/index.php/Top_10_2013-A8-Cross-Site_Request_Forgery_(CSRF) .其基础是在您的 jsp 中包含一个隐藏的(唯一的、一次性的) key ,然后您可以在第二个 servlet 中检查该 key 。

关于java - 防止未经授权访问由 servlet 定义的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18346557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com