[英]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.