1. 程式人生 > >安全防禦之防xss、SQL注入、與CSRF攻擊

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