有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

考虑下面的场景:

我有一个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) 个答案

  1. # 1 楼答案

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

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

    一个非常基本的后端验证过程涵盖了客户端的所有检查,尽管其中大多数涉及更多情况。您可以概括检查并相应地标记输入,以避免逐个检查所有输入

    关于更多信息,这里是您的关键词:java、jsp、后端、验证、表单、输入

  2. # 2 楼答案

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

    另一方面,例如,如果您有一个性别单选按钮,其值为MF,如果有人在其中提交J,则可以给他们一个处理良好的异常消息

  3. # 3 楼答案

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

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