Skip to content

Commit 9648af7

Browse files
albertovasquezjeskew
authored andcommitted
Validation of SNS messages of type: Notification should not accept Token attribute (#4)
* Notification validations should not accept Token attribute to build up verification signature * Update test to account for var name change
1 parent 03010bf commit 9648af7

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

index.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,16 @@ var url = require('url'),
2020
'SigningCertURL',
2121
'SignatureVersion'
2222
],
23-
signableKeys = [
23+
signableKeysForNotification = [
24+
'Message',
25+
'MessageId',
26+
'Subject',
27+
'SubscribeURL',
28+
'Timestamp',
29+
'TopicArn',
30+
'Type'
31+
],
32+
signableKeysForSubscription = [
2433
'Message',
2534
'MessageId',
2635
'Subject',
@@ -95,6 +104,13 @@ var validateSignature = function (message, cb, encoding) {
95104
return;
96105
}
97106

107+
var signableKeys = [];
108+
if (message.Type === 'SubscriptionConfirmation') {
109+
signableKeys = signableKeysForSubscription.slice(0);
110+
} else {
111+
signableKeys = signableKeysForNotification.slice(0);
112+
}
113+
98114
var verifier = crypto.createVerify('RSA-SHA1');
99115
for (var i = 0; i < signableKeys.length; i++) {
100116
if (signableKeys[i] in message) {

test/validator.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ var chai = require('chai'),
55
pem = require('pem'),
66
_ = require('underscore'),
77
MessageValidator = rewire('../index.js'),
8-
signableKeys = MessageValidator.__get__('signableKeys'),
8+
signableKeysForSubscription = MessageValidator.__get__('signableKeysForSubscription'),
99
invalidMessage = {
1010
foo: 'bar',
1111
fizz: 'buzz'
@@ -53,10 +53,10 @@ describe('Message Validator', function () {
5353
for (var i = 0; i < validMessages.length; i++) {
5454
var signer = crypto.createSign('RSA-SHA1');
5555

56-
for (var j = 0; j < signableKeys.length; j++) {
57-
if (signableKeys[j] in validMessages[i]) {
58-
signer.update(signableKeys[j] + "\n"
59-
+ validMessages[i][signableKeys[j]] + "\n");
56+
for (var j = 0; j < signableKeysForSubscription.length; j++) {
57+
if (signableKeysForSubscription[j] in validMessages[i]) {
58+
signer.update(signableKeysForSubscription[j] + "\n"
59+
+ validMessages[i][signableKeysForSubscription[j]] + "\n");
6060
}
6161
}
6262

@@ -208,10 +208,10 @@ describe('Message Validator', function () {
208208
for (var i = 0; i < validMessages.length; i++) {
209209
var signer = crypto.createSign('RSA-SHA1');
210210

211-
for (var j = 0; j < signableKeys.length; j++) {
212-
if (signableKeys[j] in validMessages[i]) {
213-
signer.update(signableKeys[j] + "\n"
214-
+ validMessages[i][signableKeys[j]] + "\n", 'utf8');
211+
for (var j = 0; j < signableKeysForSubscription.length; j++) {
212+
if (signableKeysForSubscription[j] in validMessages[i]) {
213+
signer.update(signableKeysForSubscription[j] + "\n"
214+
+ validMessages[i][signableKeysForSubscription[j]] + "\n", 'utf8');
215215
}
216216
}
217217

0 commit comments

Comments
 (0)