Scrapy爬蟲輕鬆抓取網站資料(以bbs為例,提供原始碼)
阿新 • • 發佈:2022-05-04
資料的CIA保護
Confidentiality:機密性指只有授權使用者可以獲取資訊。
Integrity:完整性指資訊在輸入和傳輸的過程中,不被非法授權修改和破壞,保證資料的一致性。
Availability:可用性指保證合法使用者對資訊和資源的使用不會被不正當地拒絕。
三種sql語言
DML database manipulation language 資料庫操作語言 select , insert , update , delete 等 當攻擊者使用DML語言是,就違反了資料的保密性和完整性(update)。 DDL database definition language 資料庫定義語言 攻擊者使用DDL違反了資料的完整性(alert)和可用性(drop) DCL database control language 資料庫操作語言 資料控制語言用於建立許可權,以允許使用者訪問和操作資料庫。 攻擊者使用DCL違反了資料的 保密性(grant) 可用性(revoke)。
sql注入的實現
JDBC和sql注入
public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); //代表外部輸入的引數 String parameter = "tom' union select null,null from dual'"; Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/STOREDB", "root", "root"); //此種方式直接拼接sql,無法防止sql注入的攻擊 Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select username,password from user where username='" + parameter + "'"); //使用預編譯的方式, ? 是佔位符,這種方式是可以防止sql注入攻擊的。 PreparedStatement preparedStatement = connection.prepareStatement("select * from user where userName=?"); preparedStatement.setString(1, parameter); ResultSet resultSet1 = preparedStatement.executeQuery(); }
mybatis框架和sql注入
mybatis框架的思想是將sql語句編入 到配置檔案中,避免sql語句在java程式中大量出現,方便後續對sql語句的修改和配置。
正確的使用mybatis框架可以有效的防止sql注入的發生。
在mybatis中使用parameterType向sql語句傳入引數,在sql引用傳參可以使用#{parameter}和${parameter}兩種方式
#
和$
的區別
-
#{ }
號會點語句進行預編譯,在mybatis的debug模式下,sql語句在執行的情況下回列印使用。佔位符的sql語句,這防止了sql的注入。 -
${ }
只是進行string 替換,動態解析SQL的時候會進行變數替換