安全防御之防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攻擊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM