zoukankan      html  css  js  c++  java
  • sql 注入 与解决

    package cn.itcast.jdbc;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    import com.mysql.jdbc.PreparedStatement;

    public class SqlInject {

        /**
         * @param args
         * @throws SQLException
         */
        public static void main(String[] args) throws SQLException {
            // TODO Auto-generated method stub
            read("han");
    //        read("'or 1 or'");//sql注入。别人可以通过注入攻击你的数据库  1 在数据库中相当于true
        }
        
        //解决sql注入可以用preparedStatement来解决
        static void read(String name) throws SQLException{
            Connection conn = null;
    //        Statement st = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                // 2建立链接
                conn = JdbcUtils.getConnection();
                // 3创建语句
    //            st = conn.createStatement();
                String sql = "select id,name,password,age,sex,birthday from user where name =?";
                ps = (PreparedStatement) conn.prepareStatement(sql);
                ps.setString(1, name);
                // 4 执行语句
    //            rs = st.executeQuery("select id,name,password,age,sex,birthday from user where name = '"+name+"'");
                rs = ps.executeQuery();
                // 5处理结果
                while (rs.next()) {
                    System.out.println(rs.getObject("id") + " "
                                        + rs.getObject("name")
                                        + " " + rs.getObject("password") + " "
                                        + rs.getObject("age")
                                        + " " + rs.getObject("sex") + " "
                                        + rs.getObject("birthday"));
                }
            } finally {
                JdbcUtils.free(rs, ps, conn);
            }
        }

    }

    //PreparedStatement 可以解决sql注入的问题而且执行速度也要比Statement高

    //注意:preparedStatement.executeQuery()方法时是不能够带参数的,带了编译时不报错,但是在运行的时候会出错

    /*

    在SQL中包含特殊字符或SQL的关键字(如:' or 1 or ')时Statement将出现不可预料的结果(出现异常或查询的结果不正确),可用PreparedStatement来解决。
    PreperedStatement(从Statement扩展而来)相对Statement的优点:
        1.没有SQL注入的问题。
        2.Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
        3.数据库和驱动可以对PreperedStatement进行优化(只有在相关联的数据库连接没有关闭的情况下有效)。

    */

  • 相关阅读:
    js全局变量
    $.getJSON异步请求和同步请求
    让js中的函数只有一次有效调用
    两个div并排显示,当浏览器界面缩小时会出现换行
    jquery获取窗口和文档的高度和宽度
    后台传带引号(")的数据需要注意
    C# dynamic
    (转)数据库函数解析JSON字符串
    Unicode和UTF-8
    用户通过浏览器修改表单隐藏域
  • 原文地址:https://www.cnblogs.com/siashan/p/3876530.html
Copyright © 2011-2022 走看看