SQL注入

SQL注入是對於使用SQL查詢的基於數據庫的應用程序而言的最大威脅之一,並且與輸入數據消毒聯繫在一起。 假設我們使用Node.js運行這樣一個簡單的查詢(這裡使用偽代碼): const color = //來自用戶輸入 const query = `select * from cars where color = '${color}'` 如果color是一個包含顏色(如red或blue)的字符串,一切正常運作。 但是如果你接受來自表單中input字段的字符串,並且攻擊者輸入字符串"blue';drop table cars;",你看到發生了什麼嗎? 現在query的值是: select * from cars where color = 'blue';drop table cars;' 如果你執行這個查詢,除非你在數據庫使用者的權限中移除了刪除表的選項,否則這將刪除所有數據。 再舉個例子。 假設你執行這樣一個查詢: const query = 'SELECT * FROM users where name = "' + name + '"' 如果你接受來自表單的name變量,並且沒有對其進行消毒,有人可能輸入以下值: flavio"; DELETE * FROM users; SELECT * FROM users where name ="flavio 看到了嗎?現在查詢變成了: SELECT * FROM users where name = "flavio"; DELETE * FROM users; SELECT * FROM users where name ="flavio" 這將導致用戶表被刪除。...

如何使用Sequelize與PostgreSQL進行互動

在使用資料庫時,您可以選擇使用資料庫提供的基本功能,或使用一個建立在其之上並為您抽象出細節的函式庫。 Sequelize就是其中之一,它是一個非常受歡迎的Node.js封裝器,可用於PostgreSQL、MySQL和其他資料庫。 在本文中,我將探討如何使用Sequelize來處理PostgreSQL資料庫。 安裝並設定Sequelize 在內部,Sequelize使用pg函式庫與PostgreSQL建立連接,所以當我們安裝sequelize npm套件時,我們還需要安裝pg: npm install pg sequelize 提示:如果你的專案是全新的且沒有package.json文件,請不要忘記首先執行npm init -y。 在您的Node.js文件中,您首先定義資料庫存取變數: const user = '<postgres用戶名>' const host = 'localhost' const database = '<postgres資料庫名>' const password = '<postgres密碼>' const port = '<postgres埠號>' 然後從sequelize進行三個物件的導入: import { Sequelize, Model, DataTypes } from 'sequelize' 然後,您可以使用以下語法初始化一個新的Sequelize物件實例: const sequelize = new Sequelize(database, user, password, { host, port, dialect: 'postgres', logging: false }) 我們告訴Sequelize這是什麼類型的資料庫,可以在dialect屬性中指定(如前所述,它可以處理不只是Postgres)。 我們還禁用了日誌記錄,因為它會記錄所有SQL查詢,這可能會很冗長,且我們實際上並不需要查看它們(除非您正在調試問題)。 如何創建一個Sequelize模型 對於要使用Sequelize操作的每個資料表,您都需要創建一個模型。 以下是一個示例,假設我們有一個具有“name”和“age”兩列的dogs資料表。 我們創建一個Dog類,並將其擴展Model基類: import { Sequelize, Model, DataTypes } from 'sequelize' const class Dog extends Model {} 然後在類上調用init()靜態方法,描述資料和我們要應用的規則。在此示例中,我們禁用了null:...