【问题标题】:Best way to validate user input JDBC?验证用户输入 JDBC 的最佳方法?
【发布时间】:2010-09-13 19:53:41
【问题描述】:

在 java 中是否有使用JDBC 转义用户输入的内置方法?类似于 php 版本的 mysql_real_escape() 函数。验证输入的最佳方式是什么?

【问题讨论】:

    标签: java mysql validation jdbc


    【解决方案1】:

    如果您的意思是如何确保用户输入不能用于 SQL 注入攻击,那么执行此操作的方法(以及所有 SQL 应使用 JDBC 编写的方法)是使用准备好的语句。 JDBC 将自动处理任何必要的转义。

    http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html

    【讨论】:

    • +1:始终使用绑定变量! “转义”输入是为了组装动态 SQL 语句,原因很多。
    【解决方案2】:

    为了补充@skaffman 的建议,PreparedStatements 解决了大多数应用程序的问题。但是,在某些应用程序中,SQL 语句的(部分)(而不仅仅是参数值)取自用户输入(例如,包含 ORDER BY 子句的 URL 参数)。只要确保您也对它们进行消毒,或者更好的是,尽可能避免此类设计。

    【讨论】:

    • 这个例子并不是特别引人注目。如果你想有一个用户可注入的 order-by 子句,那么有一组应用程序可以识别的固定参数,然后为每个允许的值有一个列名查找表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多