1. 程式人生 > 其它 >Scrapy爬蟲輕鬆抓取網站資料(以bbs為例,提供原始碼)

Scrapy爬蟲輕鬆抓取網站資料(以bbs為例,提供原始碼)

資料的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的時候會進行變數替換

hibernate框架