浏览器中的更改显示在服务器中

时间:2017-11-06 21:06:04

标签: java jsp servlets

抱歉我的英语不好。

我的代码中有一小部分从Servlet获取值并显示它。

<form method="post" action="rent">
    <div class="card-body">
        <h4 class="card-title">Office Number: ${o.id}</h4>
        <input type="hidden" value="${o.id}" name="officenumber">
    </div>
</form>

为了能够获取该值并将其发送到另一个servlet,我使用隐藏类型的输入。然后,我在我的servlet中捕获它

int officenumber = Integer.parseInt(request.getParameter("officenumber"));
RequestDispatcher rd;
request.setAttribute("officenumber ", officenumber );
rd = request.getRequestDispatcher("/rent.jsp");   
rd.forward(request, response);

然后我在一个新的JSP中展示它。问题是每个人都可以使用&#34; Inspect Element &#34;工具,从我的隐藏输入中更改值,并将发出新插入的值。

无论如何要避免这种情况?提前致谢。

3 个答案:

答案 0 :(得分:1)

这就是为什么你不应该依赖来自客户端的元素。 必须在服务器上进行验证。 我建议阅读将登录用户的ID放在会话上, 当收到请求时,您需要确保office-id属于该用户,并且该用户有权更改/删除它。

答案 1 :(得分:1)

您绝对应该在服务器端存储“隐藏输入”,并且不应让用户将该值发送给您。如果由于某些原因需要用户发送值,则应对用户(登录名,密码,引脚或任何方法)进行身份验证,然后验证提供给您的值。

答案 2 :(得分:0)

在这种情况下有XSS攻击的可能性。您可以做的是在客户端为名为officenumber的参数提供文本编码。稍后在服务器端解码该文本。

您可以根据自己的要求应用OWASP cheat sheet中的规则。

通过执行此操作,即使在客户端更改了值,也不会损害/破坏服务器端代码。

注意:任何人在提交表单之前都会更改表单输入参数的值,因此开发人员有责任为表单/应用程序提供安全性。