Skip to content

Commit 9e23fe3

Browse files
authored
Merge pull request #102 from trackpac-ltd/fix/sql-injection-helium-devices-insert
fix: parameterize helium_devices upsert queries to close SQL injection
2 parents 429abdd + 0a1011f commit 9e23fe3

2 files changed

Lines changed: 53 additions & 43 deletions

File tree

app/ChirpHeliumJoinRpc.py

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -122,25 +122,26 @@ async def add_session_key(self, dev_eui):
122122
query = """
123123
INSERT INTO helium_devices
124124
(dev_eui, join_eui, dev_addr, max_copies, aps_key, nws_key, dev_name, fcnt_up, fcnt_down)
125-
VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}')
125+
VALUES (%(dev_eui)s, %(join_eui)s, %(dev_addr)s, %(max_copies)s, %(aps_key)s, %(nws_key)s, %(dev_name)s, %(fcnt_up)s, %(fcnt_down)s)
126126
ON CONFLICT (dev_eui) DO UPDATE
127-
SET join_eui = '{1}',
128-
dev_addr = '{2}',
129-
max_copies = '{3}',
130-
aps_key = '{4}',
131-
nws_key = '{5}',
132-
dev_name = '{6}',
133-
fcnt_up = '{7}',
134-
fcnt_down = '{8}';
135-
""".format(
136-
devices["devEui"],
137-
devices["joinEui"],
138-
devices["devAddr"],
139-
max_copies,
140-
devices["appSKey"],
141-
devices["nwkSEncKey"],
142-
devices["name"],
143-
devices["fCntUp"],
144-
devices["nFCntDown"],
145-
)
146-
await self.db_transaction(query)
127+
SET join_eui = EXCLUDED.join_eui,
128+
dev_addr = EXCLUDED.dev_addr,
129+
max_copies = EXCLUDED.max_copies,
130+
aps_key = EXCLUDED.aps_key,
131+
nws_key = EXCLUDED.nws_key,
132+
dev_name = EXCLUDED.dev_name,
133+
fcnt_up = EXCLUDED.fcnt_up,
134+
fcnt_down = EXCLUDED.fcnt_down;
135+
"""
136+
params = {
137+
"dev_eui": devices["devEui"],
138+
"join_eui": devices["joinEui"],
139+
"dev_addr": devices["devAddr"],
140+
"max_copies": max_copies,
141+
"aps_key": devices["appSKey"],
142+
"nws_key": devices["nwkSEncKey"],
143+
"dev_name": devices["name"],
144+
"fcnt_up": devices["fCntUp"],
145+
"fcnt_down": devices["nFCntDown"],
146+
}
147+
self.db_transaction(query, params)

app/ChirpHeliumKeysRpc.py

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,14 @@ def __init__(
2323
async def db_fetch(self, query: str):
2424
async with self.pool.acquire() as conn:
2525
async with conn.transaction():
26-
return await conn.fetch(query)
26+
cur = await conn.fetch(query)
27+
await db.close()
28+
return cur
29+
30+
def db_transaction(self, query: str, params=None):
31+
with psycopg2.connect(self.postgres) as con:
32+
with con.cursor() as cur:
33+
cur.execute(query, params)
2734

2835
async def db_transaction(self, query: str):
2936
async with self.pool.acquire() as conn:
@@ -86,28 +93,30 @@ async def get_merged_keys(self, dev_eui: str) -> str:
8693
query = """
8794
INSERT INTO helium_devices
8895
(dev_eui, join_eui, dev_addr, max_copies, aps_key, nws_key, dev_name, fcnt_up, fcnt_down)
89-
VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}')
96+
VALUES (%(dev_eui)s, %(join_eui)s, %(dev_addr)s, %(max_copies)s, %(aps_key)s, %(nws_key)s, %(dev_name)s, %(fcnt_up)s, %(fcnt_down)s)
9097
ON CONFLICT (dev_eui) DO UPDATE
91-
SET join_eui = '{1}',
92-
dev_addr = '{2}',
93-
max_copies = '{3}',
94-
aps_key = '{4}',
95-
nws_key = '{5}',
96-
dev_name = '{6}',
97-
fcnt_up = '{7}',
98-
fcnt_down = '{8}';
99-
""".format(
100-
devices["devEui"],
101-
devices["joinEui"],
102-
devices["devAddr"],
103-
max_copies,
104-
devices["appSKey"],
105-
devices["nwkSEncKey"],
106-
devices["name"],
107-
devices["fCntUp"],
108-
devices["nFCntDown"],
109-
)
110-
await self.db_transaction(query)
98+
SET join_eui = EXCLUDED.join_eui,
99+
dev_addr = EXCLUDED.dev_addr,
100+
max_copies = EXCLUDED.max_copies,
101+
aps_key = EXCLUDED.aps_key,
102+
nws_key = EXCLUDED.nws_key,
103+
dev_name = EXCLUDED.dev_name,
104+
fcnt_up = EXCLUDED.fcnt_up,
105+
fcnt_down = EXCLUDED.fcnt_down;
106+
"""
107+
params = {
108+
"dev_eui": devices["devEui"],
109+
"join_eui": devices["joinEui"],
110+
"dev_addr": devices["devAddr"],
111+
"max_copies": max_copies,
112+
"aps_key": devices["appSKey"],
113+
"nws_key": devices["nwkSEncKey"],
114+
"dev_name": devices["name"],
115+
"fcnt_up": devices["fCntUp"],
116+
"fcnt_down": devices["nFCntDown"],
117+
}
118+
self.db_transaction(query, params)
119+
# await self.async_db_transaction(query)
111120
return f"Updated: {dev_eui}"
112121

113122
async def helium_skfs_update(self):

0 commit comments

Comments
 (0)