【问题标题】:JSP thinks my conditional is a block statementJSP 认为我的条件是块语句
【发布时间】:2018-04-17 11:21:14
【问题描述】:

这是我正在编写的用于管理 PostgreSQL 的小 JSP servlet 的 sn-p 代码,JSP 声称该 servlet 无效。

<% if (request.getParameter("student-id") != null && 
    request.getParameter("sname") != null && 
    request.getParameter("date-of-birth") != null && 
    request.getParameter("email") != null && 
    request.getParameter("level") != null) {
        String update = "UPDATE students SET name = '" + request.getParameter("sname") + "', " +
        "date_of_birth = '" + request.getParameter("date-of-birth") + "', " +
        "email = '" + request.getParameter("email") + "', " +
        "level = '" + request.getParameter("level") + "' " +
        "WHERE student_id = " request.getParameter("student-id");
        statement.executeUpdate(update);
} %>

由于某种原因,这引发了我抱怨缺少分号的严重错误:

An error occurred at line: 65 in the jsp file: /students.jsp
Generated servlet error:
Syntax error, insert ";" to complete BlockStatements

第 65 行是我打开 的地方

【问题讨论】:

  • Little Bobby Tables strikes again.(竟然是一张叫“学生”的桌子!)
  • 很高兴您在"WHERE student_id = " request.getParameter("student-id"); 行中的错字(缺少+),因为现在您知道您有一个更大的问题可以轻松解决(见上文)。
  • 安德烈斯:真的,真的确定你明白 T.J 在这里说什么。您的代码存在重大安全问题。
  • 完全未经处理的输入不是要走的路,你说?!不过,感谢您指出这一点,这对整个 SQL 来说是非常新的。

标签: java sql jsp


【解决方案1】:

在这个地方的 where student_id=" 后面缺少一个“+”

<% if (request.getParameter("student-id") != null && request.getParameter("sname") != null && request.getParameter("date-of-birth") != null && request.getParameter("email") != null && request.getParameter("level") != null) { String update = "UPDATE students SET name = '" + request.getParameter("sname") + "', " + "date_of_birth = '" + request.getParameter("date-of-birth") + "', " + "email = '" + request.getParameter("email") + "', " + "level = '" + request.getParameter("level") + "' " + "WHERE student_id = "+ request.getParameter("student-id"); statement.executeUpdate(update); } %>

【讨论】:

    【解决方案2】:

    在这行你忘了放加号

    "WHERE student_id = " request.getParameter("student-id");
    

    我可以建议String.format() 作为构建 sql 语句的更好、更清晰的方法

    【讨论】:

    • 错别字不需要答案,只需关闭投票和(如果适用)cmets。
    • 耶稣。我已经看这个太久了。谢谢!
    • String.format 不是构建 SQL 语句的更好方法。正确的 SQL 参数是构建 SQL 语句的更好方法。
    • 谢谢,@AndresValdes,我为你找到了这个错误,但我被否决了。您至少可以接受并投票。
    • 实际上,Sharon 建议某人使用 format(...) 在 JSP 中构建 SQL 查询是非常糟糕的建议。它在一层语法糖后面隐藏了一个 SQL 注入漏洞。请阅读 TJ Crowder 的“Bobby Tables”链接。
    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多