今天開始的幾個篇章
要來介紹一下榮登 OWASP TOP 10 第一名注入攻擊中的大宗 - SQL Injection
全名 Structured Query Language 結構化查詢語言
專門用來處理資料的存取與管理
一個資料庫裡面有多張表
一張表裏面又有多個 column
table 的概念就像 Excel
一個直的稱為 column
每個橫的稱為 row
每個 row 為一組資料
除了 SQL 這個語言外
還需要有一個 engine 來讓我們可以使用這些功能
現存的 SQL Engine 非常多種
這次的例子就以 MySQL 與 MariaDB 當範例
不談多詳細
先知道怎麼用就好
在這些語法中,指令的大小寫並不影響
Database
首先最一開始當然就是需要對資料庫做操作
整體語法很直觀
語法 | 說明 |
---|
| SHOW DATABASES;
| 列出所有 DB |
| CREATE DATABASE <db_name>;
| 新增一個 DB |
| USE <db_name> ;
| 選擇使用該 DB |
| DROP DATABASE <db_name> ;
| 刪除一個 DB |
Table
語法 | 說明 |
---|
| SHOW TABLES;
| 列出所有 Table |
| DROP TABLE <tb_name> ;
| 刪除一個 Table |
接下來稍微有點不同
在 Create 一張表時
需要同時將 column 資訊宣告出來
CREATE TABLE <tb_name> (
<col_name1> type,
<col_name2> type,
<col_name3> type,
...
)
在創建完東西後
來到了資料庫中最重要的其中一個指令
那就是 "找資料"
SELECT * FROM <tb_name>
SELECT <col>, <col>, ... FROM <tb_name>
要記得在 SQL 中字串都只能用單引號('
)包起來
雙引號是不給過的喔
然後庫名、表名、欄位名都可以用重音符(`
) 包起來
在查詢資料時
我們不可能總是把整份文件倒出來
一定會需要某些過濾
所以就有了這個小插件
用來塞選符合我們條件的資料才印出來
SELECT *
FROM <tb_name>
WHERE <condition> AND|OR <condition> ...
順序需放在 WHERE 後面
用來對資料進行排序以某 column 的資料做字典序
ORDER BY <col>, <col> ...
在查詢的最後輸出前
限制要輸出的資料筆數
所以順序比 order by 更後面
LIMIT <from>, <n>
對特定欄位插入資料
值需一一對應填入的欄位順序
INSERT INTO <tb>(<col>, ...)
VALUES (<val>, ...)
對全部欄位都插入值
需照著當初宣告的順序填值
INSERT INTO <tb>
VALUES (<val>, ...)
不加 where 會將整個 table 內容清空 !!!!!!!!!!!!!!!!!!!!!!!!
從某張表刪除符合條件的 row
DELETE FROM <tb>
WHERE <condition>
不加 where 會將 table 中該欄位直接毀滅 !!!!!!!!!!!!!!!!!!
更新某張表中
符合條件的 row
將其中的某些 col 設定為某個值
UPDATE <tb>
SET <col>=<val>, ...
WHERE <condition>
到這邊基本語法也提的差不多了
明天開始會進入 SQLi 的主體
大家可以花些時間將上面的語法熟悉一下
這邊有一包 範例 DB
大家可以自己建起來練習看看