簡體   English   中英

pg (node-postgres) 是否自動清理數據

[英]Does pg (node-postgres) automatically sanitize data

我正在將node-postgres用於生產應用程序,我想知道是否有什么我應該關注的? 數據是否由node-postgres自動清理?

我在 github 頁面上找不到任何關於它的信息: https : //github.com/brianc/node-postgres

絕對地! node-postgres 中的參數化查詢支持是一流的。 所有轉義都是由 postgresql 服務器完成的,以確保跨方言、編碼等的正確行為......例如,這不會注入 sql:

 client.query("INSERT INTO user(name) VALUES($1)", ["'; DROP TABLE user;"], function (err, result) { // ... });

這是來自他們的文檔

它基本上取決於您如何按照@vitaly-t 的描述執行查詢

假設您將在字符串中定義查詢並執行如下:

var query = `SELECT * FROM table where username='${username}' and password='${password}`;
        
pool.query(query, (error, results) => {
});

在這種情況下,如果我會通過username = ' ' 或 1=1; --密碼= ' ' 或 1=1; ——

然后它將返回表中的所有記錄(意味着 SQL 注入有效)

但是如果我要執行以下查詢

pool.query('SELECT * FROM table where username=$1 and password=$2', [username, password], (error, results) => {
});

那么 SQL 注入將永遠不會起作用,因為 pg 會清理數據。

所以這取決於你如何執行查詢。

這取決於您如何執行查詢:

通過Prepared Statements格式化由服務器執行,它反過來從任何 SQL 注入中清理您的查詢。 但它還有其他限制,例如您一次不能執行多個查詢,並且您不能在需要時提供經過消毒的實體名稱。

客戶端查詢格式,如pg-promise實現的格式,可以清理值,並提供格式化實體名稱和多個查詢的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM