You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
when able to prevent open cypher query injection. Added placeholder function for sanitization of query text that cannot be parameterized (such as node and edge labels in match clause). Sanitization logic is still to be determined after consultation with AWS.
@@ -133,7 +153,7 @@ async function getEdgesNames() {
133
153
134
154
135
155
asyncfunctionfindFromAndToLabels(edgeStructure){
136
-
letquery=`MATCH (from)-[r:${edgeStructure.label}]->(to) RETURN DISTINCT labels(from) as fromLabel, labels(to) as toLabel`;
156
+
letquery=`MATCH (from)-[r:${sanitize(edgeStructure.label)}]->(to) RETURN DISTINCT labels(from) as fromLabel, labels(to) as toLabel`;
137
157
letresponse=awaitqueryNeptune(query);
138
158
for(letresultofresponse.results){
139
159
for(letfromLabelofresult.fromLabel){
@@ -190,9 +210,10 @@ function addUpdateEdgeProperty(edgeName, name, value) {
190
210
191
211
192
212
asyncfunctiongetEdgeProperties(edge){
193
-
letquery=`MATCH ()-[n:${edge.label}]->() RETURN properties(n) as properties LIMIT ${SAMPLE}`;
213
+
letquery=`MATCH ()-[n:${sanitize(edge.label)}]->() RETURN properties(n) as properties LIMIT $sample`;
214
+
letparameters={sample: SAMPLE};
194
215
try{
195
-
letresponse=awaitqueryNeptune(query);
216
+
letresponse=awaitqueryNeptune(query,parameters);
196
217
letresult=response.results;
197
218
result.forEach(e=>{
198
219
Object.keys(e.properties).forEach(key=>{
@@ -214,9 +235,10 @@ async function getEdgesProperties() {
214
235
215
236
216
237
asyncfunctiongetNodeProperties(node){
217
-
letquery=`MATCH (n:${node.label}) RETURN properties(n) as properties LIMIT ${SAMPLE}`;
238
+
letquery=`MATCH (n:${sanitize(node.label)}) RETURN properties(n) as properties LIMIT $sample`;
239
+
letparameters={sample: SAMPLE};
218
240
try{
219
-
letresponse=awaitqueryNeptune(query);
241
+
letresponse=awaitqueryNeptune(query,parameters);
220
242
letresult=response.results;
221
243
result.forEach(e=>{
222
244
Object.keys(e.properties).forEach(key=>{
@@ -238,10 +260,10 @@ async function getNodesProperties() {
238
260
239
261
240
262
asyncfunctioncheckEdgeDirectionCardinality(d){
241
-
letqueryFrom=`MATCH (from:${d.from})-[r:${d.edge.label}]->(to:${d.to}) WITH to, count(from) as rels WHERE rels > 1 RETURN rels LIMIT 1`;
263
+
letqueryFrom=`MATCH (from:${sanitize(d.from)})-[r:${sanitize(d.edge.label)}]->(to:${sanitize(d.to)}) WITH to, count(from) as rels WHERE rels > 1 RETURN rels LIMIT 1`;
242
264
letresponseFrom=awaitqueryNeptune(queryFrom);
243
265
letresultFrom=responseFrom.results[0];
244
-
letqueryTo=`MATCH (from:${d.from})-[r:${d.edge.label}]->(to:${d.to}) WITH from, count(to) as rels WHERE rels > 1 RETURN rels LIMIT 1`;
266
+
letqueryTo=`MATCH (from:${sanitize(d.from)})-[r:${sanitize(d.edge.label)}]->(to:${sanitize(d.to)}) WITH from, count(to) as rels WHERE rels > 1 RETURN rels LIMIT 1`;
0 commit comments