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注入攻擊的演示
