sql注入學習筆記

2022-03-06 14:59:04 字數 1699 閱讀 7328

1.什麼是sql注入

sql注入就是指web應用程式對使用者輸入的資料的合法性沒有判斷,前端傳入後端的引數帶有資料庫查詢的語句,攻擊者可以構造不同的sql語句來實現對資料庫的操作。

2.sql注入原理

sql注入漏洞產生需要滿足以下兩個條件。

-->引數使用者可控,前端傳給後端的引數內容是使用者可以控制的

-->引數帶入資料庫查詢:傳入的引數拼接到sql語句,且帶入資料庫查詢。

當傳入id引數為1'時,資料庫執行的**如下。

select * from users where id = 1'

這不符合資料庫的語法規範,所以會報錯,當傳入id引數為1 and 1=1 時,執行的語句如下。

select * from users where id = 1 and 1=1

這時候是where語句中,id = 1為真,1 = 1也為真,所以頁面會返回與id=1相同的結果,當傳入的引數後面為 and 1 = 2時,由於1 = 2不成立,所以返回假,就會返回與id=1不同的結果。

由此就可以判斷id引數存在sql注入漏洞。

因此開發者需秉持「外部資料皆不可信」的原則進行開發。

3.mysql注入相關的知識點

在mysql5.0版本之後,mysql預設在資料庫中存放了乙個information_schema的資料庫。在該庫中需要記住的表名有:schemata 、tables、columns。

schemata表儲存該使用者建立的所有資料庫的庫名如下圖所示。

我們只需要記住該表中記錄資料庫名字的欄位名為schema_name。

tables表儲存了該使用者建立的所有資料庫的庫名和表名,如下圖所示

需要記住的欄位名分別為tables_schema和table_name。

columns表儲存該使用者建立的所有資料庫的庫名,表名和欄位名,如下圖所示。

需要記住的欄位名有table_schema、table_name和column_name。

1.mysql查詢語句

select 查詢的欄位名 from 庫名.表名

select 要查詢的欄位名 from 庫名.表名 where 已知條件的欄位名 = '已知條件的值'

select 要查詢的欄位名 from 庫名.表名 where 已知條件的欄位名 = '已知條件的值' and 已知條件2的欄位名 = '已知條件2的值'

2.limit的用法

limit使用格式為 limit m,n 其中m時記錄開始的位置,從0開始取一條記錄就是limit 0,1,這就是取出提一條記錄

3.需要記住的幾個函式

database()    當前**使用的資料庫

version()    當前mysql的版本

user()    當前mysql的使用者

4.注釋符

在mysql中常見的注釋符的表達方式為 #、--空格、/**/

5.內聯注釋

內聯注釋的形式:/* !code */。內聯注釋可以用於整個sql語句中,來執行我們的sql語句。

SQL注入學習筆記

sql注入漏洞是由於sql語句的呼叫方法不完善而產生的安全隱患。一旦應用中存在sql注入漏洞,就可能造成如下影響。值得注意的是,以下影響中攻擊者都能夠直接對伺服器實施主動攻擊,而不需要使用者參與。根據資料庫引擎的不同,通過sql注入攻擊還可能會達到下列效果。sql注入攻擊能夠以開發者意想不到的方式改...

Sql 注入 學習筆記

先了解下crlf,crlf常用在分隔符之間,cr是carriage retum ascii 13,r lf是line feed ascii 10,n r n這兩個字元類似於回車是用於換行的,因此該漏洞可能會導致程式原有的語義被改變 如 def helloworld name open test a ...

SQL注入學習筆記(2)

在做題時的一些總結 注釋 1.單行注釋 mysql中 也可以 注意 瀏覽器url中 有特殊作用,不一定能用 2.多行注釋 3.注 號在語句中變成了空格。用來和後面的單引號分隔開,將後面的語句注釋。了解原理後便知道了 無法使用的原因,是因為 與後面的單引號連線在一起,無法形成有效的mysql語句 後面...