nodejs sequelize庫防注入測試

2021-07-24 17:52:42 字數 1910 閱讀 7359

測試

這裡我測試前面提到的兩種查詢方式如何做到初步的防sql注入功能;

下面的查詢語句, 加入了使用者輸入的時間項:begin,end, 正常情況是:

begin = 20161101;

select .. from tbl where pdate>=20161101 and ...;

而如果有人故意輸入如下的引數, 則就會出現sql注入:

begin = '20161101 and 1=1; -- hack';

select .. from tbl where pdate>=20161101 and 1=1; -- hack ...;

解決上面的辦法, 通常有兩種:

1. 對輸入的引數進行轉義, 因為sql注入通常需要'符號來閉合前面的', 這樣如果位面在輸入的引數中的'全部轉義為\', 則查詢時就不會出現中斷(執行兩條sql語句), 參看下面的例子;

2. 設定mysql只能一次執行一條sql語句;

先看**

var tblname = 'tbl_test', begin = '20160923 and 1=1;-- hack', end = 20160928;

var sqlquery = `select * from $ where pdate>=$ and pdate<=$ group by pdate`;

promise.resolve([

// 第一條查詢

sequelize.query(sqlquery),

// 第一二條查詢

project.findall(,

where: }}

})]).spread(function

(sql1, sql2))

select * from tbl_test where padte>=20160923

and1=1;

-- hack and pdate<=....;

結果出現注入,pdate<=..這一塊的條件沒有被執行;

select * from tbl_test where pdate>'20160923\' and 1=1;-- hack'

and pdate<='...'.....;

顯然,這裡引數裡的20160923'引號沒有起作用, 被轉換為了`20160923\」,所以有效避免了注入, 制查詢了符合要求的資料或空資料;

下面通過sequelize.query()介面提供的引數繫結和查詢方法指定來防止sql注入的發生.

var tblname = 'tbl_test', begin = '20160923 and 1=1;-- hack', end = 20160928;

var sqlquery = `select * from $ where pdate>=$begin and pdate<=$end group by pdate`;

promise.resolve([

sequelize.query(sqlquery,

type: ymmodel.sequelize.querytypes.select, // 指定sql為select

bind:

),]).spread(function

(sql1))

防SQL注入

這段 有好處也有壞處,用的時候得小心,搞不好就會跳進錯誤 dimsql injdata sql injdata and exec insert select delete update chr mid master truncate char declare sql inj split sql in...

防SQL注入

1.必須認定使用者輸入的資料都是不安全的 使用者輸入的資料進行過濾處理 if preg match w get username matches else 讓我們看下在沒有過濾特殊字元時,出現的sql情況 設定 name 中插入了我們不需要的sql語句 name qadir delete from ...

防SQL注入

與資料庫互動的 web 應用程式中最嚴重的風險之一 sql 注入攻擊。sql 注入是應用程式開發人員未預期的把 sql 傳入到應用程式的過程,它由於應用程式的糟糕設計而使攻擊成為可能,並且只有那些直接使用使用者提供的值構建 sql 語句的應用程式才會受影響。sql 語句通過字串的構造技術動態建立,文...