如何防止有人从JSP / Servlets中的浏览器修改输入表单参数

时间:2014-10-20 10:06:57

标签: java jsp servlets

考虑以下情况:

我有一个HTML表单。

<input type="radio" name="radioButton" value="1" >Radio One<br>
<input type="radio" name="radioButton" value="2"> Radio Two

我正在读取用户在我的一个servlet中提供的输入:

int radioype = Integer.parseInt(request.getParameter("radioButton"));

现在我不需要空检查,因为我知道这个值不会为空。 该值可以是1或2,因此它将被成功解析为int。但是,任何机构都可以将radioButton(例如通过使用FireBug)的值更改为其他内容。这会给我的应用带来很多麻烦。

处理这种情况的最佳方法是什么?我的应用程序中有很多这样的输入,包括文本框,下拉列表,文本区域等。我同意我必须自己验证文本框。但是这些复选框和单选按钮似乎太过验证了。

3 个答案:

答案 0 :(得分:2)

您已经确定了真正的问题 - 用户可以使用类似Firebug的内容发回他们喜欢的任何内容,包括这些参数的null。您无需验证是否需要验证来自浏览器表单的所有内容。否则会使您的应用程序不安全并且容易被黑客攻击。

我建议使用许多可用的Java Web框架之一,这样可以在应用程序中相对容易地创建验证层(例如:Spring-MVC或Struts 2)。

答案 1 :(得分:1)

我不认为这有一个简单的方法。您根本无法阻止想要更改请求值的人这样做,因此您必须在代码中对其进行验证。也许您可以做的最好的事情是实现最通用的验证层,这样您就可以轻松地将其应用于所有现有代码,而无需进行大的更改。

另一方面,例如,如果您有一个性别单选按钮,其值为MF,那么如果有人在其中提交J,那就是完全没问题,给他们一个处理得当的异常信息。

答案 2 :(得分:0)

从客户端到服务器的任何事情都不在您的控制和观察之下。因此,您需要在后端实现所有验证方法。

后端验证是必须的,而不是一个选项。我见过很多人依赖客户端输入验证并遇到了很大的麻烦。阅读有关SQL注入的示例。

一个非常基本的后端验证过程涵盖了客户端的所有检查,但其中大部分都涵盖了更多案例。您可以概括检查并相应地标记输入,以便不逐个检查所有输入。

有关详细信息,请输入以下关键字:java,jsp,backend,validation,form,input