安全防御之防xss、SQL注入、与CSRF攻击

XSS攻击

  • 个人理解,项目中最普通的就是通过输入框表单,提交js代码,进行攻击
    例如在输入框中提交 <script>alert("我是xss攻击");</script>,如果没有防
    御措施的话,就会在表单提交之后,弹出弹窗
  • 防御措施,目前我主要是用一个过滤器,将特殊字符进行转义
  • 代码部分

SQL注入攻击

  • 个人理解,通过提交sql代码,进行攻击,轻则不需要用户名密码可登录系统,
    重则拿到你数据库核心数据
  • 防御措施,项目使用的不同数据库连接框架有不同的方法防御,如果是javaweb
    正常使用PreparedStatement预编译,可进行防御
    mybatis则优先使用 #{}。因为 ${} 会导致 sql 注入的问题
    参考连接https://www.2cto.com/database/201709/676537.html
  • 代码部分(这里使用javaweb的时候代码)
  • public boolean login(String username,String password) throws ClassNotFoundException, SQLException{
            /**
             * 1.得到Connection
             * 2.得到Statement
             * 3.得到ResultSet
             * 4.rs.next()返回的是什么,我们就返回什么
             * 
             */
            //准备四大参数
            String DriverClassName = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/mydb3";
            String user = "root";
            String pwd = "root";
            Class.forName(DriverClassName);
            Connection conn = DriverManager.getConnection(url, user, pwd);
            /**
             * 二、得到Statement
             */
            Statement stmt = conn.createStatement();
            String sql ="select * from t_user where username='"+username+"' and password ='"+password+"'";
            //System.out.println(sql);
            ResultSet rs = stmt.executeQuery(sql);
            
            return rs.next();
        }

     

  • @Test
        public void fun1() throws ClassNotFoundException, SQLException{
            String username="a' or 'a'='a";
            String password="a' or 'a'='a";
            boolean bool=login(username,password);
            System.out.println(bool);
        }

    这里的sql语句是

  • select * from t_user where username='a' or 'a'='a' and password ='a' or 'a'='a'

    这就是sql注入攻击的演示

CSRF攻击

posted @ 2018-12-24 16:58  日常记录学习  阅读(1230)  评论(0编辑  收藏  举报