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

时间:2013-08-20 23:29:07

标签: java servlets authorization

我希望防止未经授权的黑客攻击/窃取由公共网站的一部分提供的servlet提供的Web服务。如何确保访问者只能访问站点上特定URL的servlet?

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

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

  1. 我可以在下面的servlet2 doGet()中添加什么来确保servlet2 doGet()仅用于 如果我的网站访问者从my.jsp调用它会运行吗?
  2. 我可以对jstl或my.jsp的其他部分做任何事情来保护 防止未经授权调用servlet2?
  3. 我还能做些什么来防止未经授权调用servlet2?
  4. 我的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,它具有由param.a和param的值填充的img标签src属性。 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表单来创建图像的新自定义版本,除非他们每次都按下后退按钮。

1 个答案:

答案 0 :(得分:1)

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